我想使用随机维度创建一个二维数组。
这是我的随机数生成器方法:
int GetRandomNumber(int low, int high)
{
srand((unsigned)time(NULL));
int res = rand() % ((high + 1) - low) + low;
return res;
}
现在主要代码如下:
void main()
{
int dime = GetRandomNumber(3, 5), a = GetRandomNumber(3, 5), b = GetRandomNumber(3, 5);
int matA[a][dime];
int matB[dime][b];
system("PAUSE");
}
问题是我得到一个expression must have a constant value 并且cannot allocate an array of constant size 0 错误。
我的问题是如何使用随机数作为维度制作二维数组。
最佳答案
从 C99 开始,您可以使用可变长度数组 在运行时定义数组的大小:
int x = some_value();
int y = some_other_value();
int arr[x][y];
由于它们的大小直到运行时才确定,因此对它们的使用有一些限制——它们不能有 static
存储持续时间(即,它们不能在文件范围内或使用static
关键字),并且不能在声明中使用初始化程序。如果 x
或 y
很大,您还需要小心。
如果您没有可用的 C99 或更高版本的编译器,那么这将不起作用。您将不得不改用动态内存分配,并且必须将其分配为“锯齿状”数组:
int x = some_value();
int y = some_other_value();
int **arr = malloc( sizeof *arr * x );
if ( arr )
{
for ( size_t i = 0; i < x; i++ )
{
arr[i] = malloc( sizeof *arr[i] * y );
}
}
完成后,您将取消分配为
for (size_t i = 0; i < x; i++ )
free( arr[i] );
free( arr );
在访问元素时,这将像任何其他二维数组一样工作:
arr[i][j] = some_value();
但请注意,行不会连续 - 从一行的末尾到下一行的开头会有间隙。如果这很重要,那么最后一个选项是声明一维数组并手动计算索引:
int *arr = malloc( sizeof *arr * x * y );
...
arr[i * x + j] some_value();
完成后,您可以将其释放
free( arr );
关于c - 通过 C 中的随机数定义二维数组维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53766445/