c - 二维数组的长度[i]

标签 c arrays

我正在使用 C 语言工作,并尝试复制其他语言(即:C++)用来确定数组或可能的数据 vector 的长度的 length 成员函数。这是我可以用 C 语言完成的事情,还是我必须依靠这样的示例:

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

最佳答案

一般来说,在 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);
   }
}

关于c - 二维数组的长度[i],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576773/

相关文章:

java - 从没有设置的数组字符串中删除重复项

C/CAPL 从另一个数组定义一个数组

c - 从用户输入动态填充数组时接收非零退出状态

c - 带有 fscanf 的 EXC_BAD_ACCESS

c - C中位图文件的像素操作

c - 在C中使用二维数组时出现"too many braces around scalar initializer"错误

arrays - 翻转 3D numpy 数组

java - 从 List<Byte> 创建 byte[]

c - 如何仅从虚拟地址获取内存段的页面大小?

C中用union将串口数据转为float