首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >初始化顺序:具有指向同一数组的单独指针的数组

初始化顺序:具有指向同一数组的单独指针的数组
EN

Stack Overflow用户
提问于 2021-09-16 20:49:01
回答 1查看 54关注 0票数 1

我有一行代码声明了char的静态数组,如下所示:

代码语言:javascript
运行
复制
char buf[7];

我想使用指针遍历这个数组,但是buf本身显然不能增加或减少。我的问题基本上是,是合法的,还是这个未定义的行为:

代码语言:javascript
运行
复制
// Does this guarantee ptr == buf?
char buf[7], *ptr = buf;

// ... because if not, then this could crash my program!
std::cout << *ptr << '\n';

这个例子和类似的例子在我的计算机(WSL,gcc 9.3.0)上编译和运行都很好,带有所有的优化标志。在我运行的每一次测试中,buf == ptr。但从技术上讲,C++标准是否允许编译器重新排序这些声明,以便将ptr初始化为一些垃圾值?

显然,我可以将它分成两行,避免任何疑问,但我想知道这个一行声明是否有效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-16 21:04:14

这是合法的

是这种未定义的行为

不是

:C++标准是否允许编译器重新排序这些声明,以便将ptr初始化为一些垃圾值?

不,它用ptr衰变到的char*初始化buf。如果允许编译器以另一个顺序初始化它们,则需要失败编译,因为它还没有看到buf

与之相比:

好的:

代码语言:javascript
运行
复制
char buf[7];
char *ptr = buf;

错误:

代码语言:javascript
运行
复制
char *ptr = buf;
char buf[7];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69214987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档