我面临下一个情况:
char *arr[] = {"hello", (char *) 0};
上面将创建一个char指针数组,并arr[0]指向"hello"字符串的第一个字符.但是,(char *) 0在这种情况下是什么以及它可以在哪里使用?
当我尝试调用arr[1]它时,会给我下一个错误:
segmentation fault (core dumped)
编辑:我在创建posix_spawn函数的argv参数时使用它(它需要在最后一个位置有一个空指针):
The argument argv is an array of character pointers to null-terminated strings. The last member of this array shall be a null pointer and is not counted in argc.
在此上下文中,0是一个空指针常量.它可以在有或没有强制转换的情况下转换为任何指针类型,从而提供该类型的空指针.在现代C++中,您可以编写nullptr以使其更清楚地表示您指的是空指针,而不是数字零.还有一个NULL用于同一目的的宏.
所以这里有两个指针:一个指向字符串文字的字符数组,另一个指向null,并且不指向任何指针.
取消引用空指针会产生未定义的行为; 通常是您遇到的分段错误.
请注意,在现代C++中,您需要const char *指向常量字符串文字"hello".较旧版本的语言允许危险转换为非const,char *以便与没有概念的古代C代码兼容const; 现在终于从语言中删除了这种肮脏.