2维指针数组

时间:2014-09-21 23:39:29

标签: c++ arrays c++14

为了声明二维指针数组,这是代码:

int x;
cin>>x;

int** pointerx = new int*[x];
for(int i = 0; i<x;i++){
    pointerx[i] = new int[x];
}

从c ++ 14开始或通过编译器扩展:

int* pointerx[x][x];

使用第一个代码而不是第二个代码是否有任何陷阱,反之亦然?

2 个答案:

答案 0 :(得分:1)

int* pointerx[x][x];在C ++ 14中不合法。它被添加到早期草稿中,但在最终规范之前就被删除了。

使用编译器扩展的主要缺陷是:

  • 您的代码在其他编译器或同一编译器的其他版本上可能无法正常工作(或以不同的方式工作)。
  • 通常没有明确说明代码功能的文档,因此如果代码不能正常工作,很难获得支持。

如果您查看文本可变修改类型的C标准,您会发现它出现在很多地方;允许可变长度数组的效果有蝴蝶效应&#34;它最终影响了语言中的许多其他事情。

例如,如果允许int* pointerx[x][x];,您的编译器是否也支持int* (*y)[x] == pointerx;并正确处理sizeof *y?也许它确实如此;你的编译器文档也描述了吗?

答案 1 :(得分:0)

第一组代码是一个int指针指针,你指向一个指向int的指针,或者在这种情况下是一个int指针数组,所以pointerx [i]实际上不会持有int,而第二位是代码将是一个指向2D数组的指针,所以pointerx [i] [i]实际上会给你一个int

如果您需要更好地解释

,请随时发表评论