为了声明二维指针数组,这是代码:
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];
使用第一个代码而不是第二个代码是否有任何陷阱,反之亦然?
答案 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
如果您需要更好地解释
,请随时发表评论