首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++在int指针中存储字符数组

C++在int指针中存储字符数组
EN

Stack Overflow用户
提问于 2015-06-09 15:41:01
回答 2查看 197关注 0票数 2

在这一行中是否有任何类型的铸造(隐式、显式):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int *p= "hello there"; 

此外,从C/C++的角度来看,这种说法的正确性是什么?

注:它在AVR-GCC上编译,并与其他编译器一起失败.

EN

回答 2

Stack Overflow用户

发布于 2015-06-09 15:59:31

回答你的问题(忽略“为什么这么做”的评论-这是正确的)

你做了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int *p=(int*)"hello there";
票数 1
EN

Stack Overflow用户

发布于 2015-06-09 16:30:36

此代码在C和C++中是非法的。我们可能会猜到,AVR-GCC假装你写过:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int *p = (int *)"hello there";

您也许可以通过写信来确认这一点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char *q = "hello there";
int *p = q;

看看pq是否有相同的地址。(尽管无论从哪种方式来看,这都不是完全决定性的)。

最好找出如何在编译器报告错误或非法代码警告的模式下调用编译器。通常,对于gcc来说,-Wall -pedantic会这样做,通常您也会指定一个标准版本,比如-std=c99-std=gnu99

假设代码被视为int *p = (int *)"hello there";。此代码可能会导致未定义或意外的行为,因为char数组可能无法正确地针对int对齐。

此外,如果您由于违反严格的别名规则而通过p进行读写,则会导致未定义的行为,该规则规定,只有声明为int或malloc‘s空间的变量才允许以int的形式读取或写入已写入intint

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30744742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文