6

将数组传递给函数后,如何获取 C 中整数数组中存在的元素数?以下代码不起作用。

size=sizeof(array)/sizeof(array[0]);
4

3 回答 3

16

在C中,你只能得到静态分配数组的大小,即

int array[10];
size = sizeof(array) / sizeof(int);

会给10。

如果您的数组被声明或传递为int* array,则仅给定此指针就无法确定其大小。

于 2013-04-10T15:23:33.893 回答
11

您很可能在将数组传递给的函数中执行此操作。
数组衰减为指向第一个元素的指针所以你不能在被调用的函数中这样做。

在调用函数之前执行此计算并将大小作为函数参数传递。

于 2013-04-10T15:18:35.167 回答
1

你正在以错误的方式去做。我将尝试使用一个小代码示例进行解释。解释在代码注释中:

int array[100];
int size = sizeof(array) / sizeof(array[0]);  // size = 100, but we don't know how many has been assigned a value

// When an array is passed as a parameter it is always passed as a pointer.
// it doesn't matter if the parameter is declared as an array or as a pointer.
int getArraySize(int arr[100]) {  // This is the same as int getArraySize(int *arr) { 
  return sizeof(arr) / sizeof(arr[0]);  // This will always return 1
}

正如您从上面的代码中看到的那样,您不应该使用sizeof来查找数组中有多少元素。正确的方法是使用一个(或两个)变量来跟踪大小。

const int MAXSIZE 100;
int array[MAXSIZE];
int size = 0; // In the beginning the array is empty.

addValue(array, &size, 32);   // Add the value 32 to the array

// size is now 1.

void addValue(int *arr, int *size, int value) {
    if (size < MAXSIZE) {
        arr[*size] = value;
        ++*size;
    } else {
        // Error! arr is already full!
    }
}
于 2013-04-10T15:38:31.937 回答