C++不使用vector和指针如何创建行数为随机值的二维数组
问题原因
标准C++不支持变长数组(VLA),即数组的大小必须是编译期就能确定的常量,你代码里的numOfRows是运行时调用随机函数才生成的变量,不符合要求,因此编译器抛出「表达式必须为常量值」的报错。只有部分编译器(如GCC)提供了变长数组的非标准扩展支持,依赖这类扩展会导致代码跨编译器兼容问题。
可行实现方案
因为你的行数取值区间固定为30~40,最大行数仅为40,直接声明行数为最大值的固定大小二维数组即可,实际使用时只访问前numOfRows行,不需要用到指针或vector:
const int COLUMNS = 20; // 直接声明行数为区间最大值的固定大小数组,编译期可确定大小 const int MAX_ROWS = 40; int numOfRows = genNumInRange(30, 40); int array[MAX_ROWS][COLUMNS];
后续使用数组时,遍历的终止条件写i < numOfRows即可,不会用到多余的行,额外占用的内存可以忽略不计(40*20的int数组仅占用3200字节)。
内容的提问来源于stack exchange,提问作者GGeri199
相关产品推荐
相关产品推荐

