存储N个数组的最佳方法是什么? C

时间:2017-08-03 19:53:43

标签: c arrays matrix

我的输入应该是这样的:

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]);
    }

}

但这是一个矩阵,我认为有更好的解决方案,但我真的想不出任何......

1 个答案:

答案 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();
  }