在C++铸造的结果是什么
What is the result of casting in C++?
我遇到了下一种情况:
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 的指针。在指针未指向有效对象的情况下使用它。例如,链表中最后一个节点的下一个指针。访问空指针会导致未定义的行为,并且经常导致分段错误。
- Fmod 函数清楚地输出一个预期的双精度值,但 if(fmod == 预期的双精度值)的计算结果不是 true
- std::chrono::duration::count函数的实际结果类型是什么
- 术语的计算结果不是采用0个参数的函数
- 错误 C2064:术语的计算结果不是采用 3 个参数的函数
- C++:术语的计算结果不是采用 1 个参数的函数
- ZTV,ZTS,ZTI 在 gdb x/nfu "vtable_address" 的结果中是什么意思?
- 错误 C2064:term 的计算结果不是采用 1 个参数的函数 - 关于线程的一些东西
- 如何打印返回值的结果?我是一个初学者学习C++
- 即使在C 中越过初始化阵列的极限后,结果也是如此
- 使用FP:快速导致错误的VC 结果(不仅仅是不准确)结果 - 这是编译器错误
- 我收到此错误:错误 c2064:term 的计算结果不是采用 0 个参数的函数,但我不明白为什么
- C++时间()给我的结果几乎是随机的
- 三元运算符的结果不是右值
- 为什么"decltype(i+j)"的结果不是右值引用?
- 简单的代码,看似随机的结果——这是由于过时的引用造成的吗
- wxwidgets Bind()项的计算结果不是在event.h中使用1个参数的函数
- 我正在尝试用C++制作一个费用计算器,我得到了错误C2064:term的计算结果不是一个带1个参数的函数
- 取消引用无效指针但不使用结果是否是C++中的未定义行为
- 字符* 到字符串 c++(结果不是预期的)
- 错误C2064:术语的计算结果不是一个带1个参数的函数,我该如何克服这个错误