我一直以为C不接受NULL参数,直到我开始学习指针.在某些编程语言中,如python for one,可以将NULL参数作为参数传递,但在CI中始终认为这会导致未定义的行为.
我的问题只是一个好奇心,一个功能怎么可能,比如...
waitpid(child_pid, &status, options); //pointer &status
Run Code Online (Sandbox Code Playgroud)
...接受一个NULL指针作为参数而不会运行到未定义的行为,不是NULL指针只是指向什么?
简单地说,为什么这在C中可以接受?
在某些编程语言中,可以将NULL参数作为参数传递,但在CI中始终认为这会导致未定义的行为.
单独传递NULL
指针的参数不会导致UB; 它试图访问由指针设置指向的内存NULL
.
NULL
对于未指定某些内容的情况,传递是一种非常常见的做法.NULL
在执行访问之前,调用者应检查参数.例如,标准可以传递NULL
到free
,这使得功能方便多了.
不
NULL
指针只是指向什么?
是的,他们这样做.但是"没有"是全球众所周知的,因此使用a NULL
可以让你传达指针指向你所调用的函数的事实.换句话说,检查
if (myPointer == NULL)
Run Code Online (Sandbox Code Playgroud)
定义明确*,因此您可以利用它.
*除非您使用悬空指针,即已释放的指针,或指向超出范围的对象的指针.您可以通过NULL
为您指定每个指针来防止第一种情况发生,free()
第二种情况可以通过在作用域中声明与指针所指向的自动对象范围具有相同或更高嵌套级别的指针来防止这种情况发生.