我有一行代码声明了一个静态数组char
,如下所示:
char buf[7];
我想使用指针遍历这个数组,但buf
它本身显然不能递增或递减。我的问题基本上是,这是合法的,还是这种未定义的行为:
// 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 初始化为一些垃圾值?
我显然可以将它分成两行并避免任何疑问,但我想知道这个单行声明是否有效。