在将数组传递给函数后,如何获取C中整数数组中存在的元素数?以下代码不起作用。
size=sizeof(array)/sizeof(array[0]);
答案 0 :(得分:15)
在C中,您只能获得静态分配的数组的大小,即
int array[10];
size = sizeof(array) / sizeof(int);
会给出10。
如果你的数组被声明或传递为int* array
,那么只有这个指针才能确定它的大小。
答案 1 :(得分:11)
您最有可能在传递数组的函数内执行此操作 数组衰减为指向第一个元素的指针所以你不能在被调用函数内部这样做。
在调用函数之前执行此计算,并将大小作为函数参数传递。
答案 2 :(得分: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!
}
}