【发布时间】:2012-01-15 17:58:13
【问题描述】:
来自this 参考,在 C 中,以下行为似乎是未定义的。
int my_array[100][50];
int *p = my_array[0];
p[50]; // UB
在 C++03 或 C++11 中是否有证实这一点的参考资料?
【问题讨论】:
-
您为什么认为
p[50]涉及未定义的行为? -
有趣的是,我可以使用
gcc -Wall -Wextra编译您的示例,并且不会收到有关任何未定义行为的警告;将p[50]更改为p[50] = 1;以消除“无效”警告并确保它知道它应该生成代码。 (如果您想确保它不会优化线路,请添加一些printf(3)调用。) -
@Let_Me_Be:阅读链接。似乎在问两个不同的事情,需要澄清他是想知道二维数组指针(根据链接)还是静态数组(根据他的代码)。
-
@让它不在 int[50] 数组的元素中。
-
它是一个自己的实体。子对象是对象,对象是实体类型(在 C++ 中)。我不知道 C 上下文中的“实体”概念。
标签: c++ arrays pointers multidimensional-array