我的输入应该是这样的:
n array1 array2 array3 array4 ... arrayn
其中n是整数,array1 .. arrayn是数组。数组总是有4个元素。 我可以这样做:
int n,array[100][4];
for(int i=0;i<=n-1;i++)
{
for(int j=0;j<=3;j++)
{
scanf("%d",&array[i][j]);
}
}
但这是一个矩阵,我认为有更好的解决方案,但我真的想不出任何......
答案 0 :(得分:2)
存储N个数组的最佳方法是什么? 数组总是有4个元素
一些选择:什么是最好的取决于未说明的编码目标。如果不确定,请考虑选项B
。每个使用大约相同的内存量。 VLA在本地生活,应避免使用大n
。
unsigned n = rand();
// arrayA as array n of array 4 of int
// Variable-Length-Array (VLA) available in C99 and optionally in C11
// UB if n == 0
int arrayA[n][4];
arrayA[0][0] = 42;
// no free() needed. Become invalid at the end of the block
// arrayB as pointer to array 4 of int
// Allocate memory for a n 1D arrays
int (*arrayB)[4] = malloc(sizeof *arrayB * n);
if (n > 0) arrayB[0][0] = 42;
free(arrayB); // Valid until free'd
// arrayC as pointer to array n of array 4 of int
// Allocate memory for a 2D VLA (C99,C11 maybe)
// UB if n == 0
int (*arrayC)[n][4] = malloc(sizeof *arrayC);
(*arrayC)[0][0] = 42;
free(arrayC); // Valid until free'd
malloc()
的返回值应检查NULL-ness
p = malloc(sizeof *p * n);
if (p == NULL && n > 0) {
Handle_OutOfMemory();
}