在C++铸造的结果是什么

What is the result of casting in C++?

本文关键字:结果 结果是 是什么 C++      更新时间:2023-10-16

我遇到了下一种情况:

char *arr[] = {"hello", (char *) 0};

上面将创建一个字符指针数组,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"。该语言的旧版本允许危险地转换为非常量char *,以便与没有const概念的古代 C 代码兼容;现在,这种肮脏终于从语言中消失了。

arr[1] 是一个空指针,一个值为 0 的指针。在指针未指向有效对象的情况下使用它。例如,链表中最后一个节点的下一个指针。访问空指针会导致未定义的行为,并且经常导致分段错误。

相关文章: