这个问题已经在这里有一个答案:
- 在C数组的大小 6个答案
如何获得存在于C中的整数的数组元素的数目的阵列被传递到功能后? 下面的代码无法正常工作。
size=sizeof(array)/sizeof(array[0]);
这个问题已经在这里有一个答案:
如何获得存在于C中的整数的数组元素的数目的阵列被传递到功能后? 下面的代码无法正常工作。
size=sizeof(array)/sizeof(array[0]);
在C语言中,你只能得到静态分配的阵列,即大小
int array[10];
size = sizeof(array) / sizeof(int);
将给予10。
如果你的数组声明或通过int* array
,有没有办法来确定其大小,只给这个指针。
你最有可能做这里面的功能,以您传递数组。
该阵列衰变指向第一个元素,所以你不能被调用的函数内这样做。
调用函数之前执行此计算,并通过大小作为函数的参数。
你是在错误的方式去了解它。 我会尝试用一个小的代码示例来解释。 【解说】代码中的注释:
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!
}
}