gpt4 book ai didi

c - 某些 C 函数如何接受空参数?

转载 作者:太空狗 更新时间:2023-10-29 16:53:13 30 4
gpt4 key购买 nike

我一直以为C不接受NULL参数,直到我开始学习指针。在某些编程语言中,例如 python,可以将 NULL 参数作为参数传递,但在 C 中,我一直认为这会导致未定义的行为

我的问题只是出于好奇,一个函数怎么会像这样...

waitpid(child_pid, &status, options);  //pointer &status

...接受 NULL 指针作为参数而不会遇到未定义的行为,难道 NULL 指针不指向任何内容吗?

简单地说,为什么这在 C 语言中是可以接受的?

最佳答案

In some programming languages [...] it is possible to pass a NULL parameter as an argument, but in C I always thought this would result in Undefined Behavior.

单独为指针传递 NULL 参数不会导致 UB;它试图访问由设置为 NULL 的指针指向的内存。

传递 NULL 是一种非常常见的做法,适用于未指定内容的情况。调用者应在执行访问之前检查参数是否为 NULL。例如,标准允许您将 NULL 传递给 free,这使得该功能更加方便。

don't NULL pointers simply point to nothing?

是的,他们有。但是“无”在全局范围内广为人知,因此使用 NULL 可以让您将指针指向任何内容的事实传达给您调用的函数。换句话说,支票

if (myPointer == NULL)

定义明确*,因此您可以充分利用它。

* 除非您使用悬挂指针,即您已释放的指针,或指向超出范围的对象的指针。您可以通过将 NULL 分配给您 free() 的每个指针来防止第一种情况的发生,通过在具有相同或更高的范围内声明指针来防止第二种情况的发生嵌套级别作为指针指向的自动对象的范围。

关于c - 某些 C 函数如何接受空参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532418/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com