二维阵列的长度[i]

时间:2013-10-24 21:14:14

标签: c arrays

我正在使用C,并且正在尝试复制其他语言(即:C ++)用来确定数组长度或可能的数据向量的length成员函数。这是我可以在C中完成的事情,还是我必须回到这样的例子:

int arraySize = sizeof(array) / sizeof(array[0]);

1 个答案:

答案 0 :(得分:2)

通常,在C中,您可以按原样使用数组:相同类型的多个数据的连续集合。通常希望您自己跟踪数组大小以及各个成员的大小。

例如,在C ++中,您可以访问Vector类,它会封装并处理为您保留的所有记录。

在C中,您应该准确知道数组的大小。这在指针衰减的情况下尤为重要。你最初的例子......

int arrayOfInts[6] = {1, 2, 3, 4, 5, 6};
int sizeOfArray = sizeof(arrayOfInts) / sizeof(int); // Success; Returns "6"

这适用于这种情况,但是如果要将数组传递给期望整数数组(作为指针)作为函数参数的函数,它将失败。

#include <stdio.h>    
int getArraySize(int* arr);

int main(void) {
   int arrayOfInts[6] = {1, 2, 3, 4, 5, 6};
   int sizeOfArray = getArraySize(arrayOfInts);
   return 0;
}

int getArraySize(int* arr) {
   int ret;
   ret = sizeof(arr) / sizeof(int); // FAILS, returns the size of a pointer-to-int, not the size of the array
   return ret;
}

有两种方法可以解决这个问题:静态定义或仔细的动态内存管理。

// CASE 1: Trivial case, all arrays are of a static fixed size
#include <stdio.h>
#define ARR_SIZE (6)

int getArraySize(int* arr);

int main(void) {
   int arrayOfInts[ARR_SIZE] = {1, 2, 3, 4, 5, 6};
   int sizeOfArray = getArraySize(arrayOfInts);
   return 0;
}

int getArraySize(int* arr) {
   return ret ARR_SIZE;
}


// CASE 2: Managing sizes with dynamic allocation
#include <stdio.h>
#define ARR_SIZE (6)

int main(void) {
   int sizeOfArray = ARR_SIZE;
   int* arrayOfInts = malloc(sizeOfArray*sizeof(int));
   if (arrayOfInts != NULL) {
      // Success; initialize
      int i;
      for (i=0; i<sizeOfArray; i++) {
         arrayOfInts[i] = i;
      }
      return 0;
   } else {
      // Failed; abort
      sizeOfArray = 0;
      return (-1);
   }
}