在此行中是否有任何类型的转换(隐式,显式):
int *p= "hello there";
此外,从C / C++的 Angular 来看,这种说法的正确性是什么?
注意:它在AVR-GCC上编译,在其他编译器上失败。
最佳答案
不,没有任何铸造。
但是在C++中,您可以将reinterpret_cast<int*>
和const_cast<char*>
一起使用,如下所示:
int *p= reinterpret_cast<int*>(const_cast<char*>("hello there"));
See a working demo.
好吧,这些声明的使用者完全留给了用户。绝对不建议这样做(因为您遇到的是未指定的行为),如果您不确定自己的行为是100%的危险,那么这样做是危险的。
但是至少两种语言都支持这样做。
C的较短变体是:
int *p= (int*)"hello there";
好吧,我不知道您用于AVR跨工具链的版本,但是任何GCC的中途更新版本都会给该语句带来错误,例如
prog.cpp:3: error: cannot convert 'const char*' to 'int*' in initialization
See demo please
我使用的是GCC的较旧版本来制作该演示:g++ 4.3.2。如果我没有得到正确的通知,最新的版本是5.x,并且我很确定使用AVR可以使用to build a cross toolchain。
1与未定义的行为有细微的区别。仅取决于您的硬件以及这些指针地址以及对齐设置。
关于c++ - C++将char数组存储在int指针中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30744742/