相关疑难解决方法(0)

使用指向元素的多维数组索引

据我所知,堆栈上的多维数组将按行顺序占用连续内存.根据ISO C++标准使用指向元素的指针索引多维数组是不确定的行为?例如:

#include <iostream>
#include <type_traits>
int main() {
  int a[5][4]{{1,2,3,4},{},{5,6,7,8}};
  constexpr auto sz = sizeof(a) / sizeof(std::remove_all_extents<decltype(a)>::type);
  int *p = &a[0][0];
  int i = p[11];  // <-- here
  p[19] = 20;  // <-- here
  for (int k = 0; k < sz; ++k)
    std::cout << p[k] << ' ';  // <-- and here
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果指针没有超出数组的边界,上面的代码将编译并正确运行a.但这是否因为编译器定义的行为或语言标准而发生?ISO C++标准中的任何参考都是最好的.

c++ c++11

12
推荐指数
2
解决办法
1059
查看次数

标签 统计

c++ ×1

c++11 ×1