我遇到了下一个情况:
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 :(得分:5)
在此上下文中,0
是空指针常量。它可以在有或没有强制转换的情况下转换为任何指针类型,从而提供该类型的空指针。在现代C ++中,您可以编写nullptr
来更清楚地表示您指的是空指针,而不是数字零。为了同样的目的,还有一个NULL
宏。
所以这里有两个指针:一个指向字符串文字的字符数组,另一个指向null,并且不指向任何内容。
取消引用空指针会给出未定义的行为;通常是您遇到的分段错误。
请注意,在现代C ++中,您需要const char *
才能指向常量字符串文字"hello"
。较旧版本的语言允许危险转换为非const char *
,以便与没有const
概念的古代C代码兼容;现在终于从语言中删除了那种肮脏。
答案 1 :(得分:2)
arr [1]是一个空指针,一个值为0的指针。在指针未指向有效对象的情况下使用它。例如,链接列表中最后一个节点的下一个指针。访问空指针会导致未定义的行为,并且通常会出现分段错误。