我在c中有以下代码:
void getNumber(int numberArray[])
{
printf("The size of the array is %u", sizeof(numberArray));
}
void main()
{
int array[6] = {1,2,3,4,5,6};
getNumber(array);
}
但为什么The size of the array is 4
?以及如何获得整个数组的大小?
void getNumber(int numberArray[])
相当于
void getNumber(int* numberArray)
所以sizeof(numberArray)
只是测量的大小int*
。
如果您想知道数组的长度,则需要将其长度作为单独的参数传递
void getNumber(int* numberArray, int len)
getNumber(array, sizeof(array)/sizeof(array[0]));
或安排数组以已知的标记值结束
int array[] = {1,2,3,4,5,6,-1}; // assumes -1 is not a valid value
int arrayLength(int* numberArray)
{
int len=0;
while (*numberArray++ != -1) {
len++;
}
return len;
}
这是不可能的,除非您使用 C99 并且数组是可变长度数组。
一般来说,数组非常像 C 中的指针,在传递给函数时更是如此。
如果getnumber(array)
您的数组名称array
衰减为指针并给出它的大小4
。在 的情况下sizeof
,数组名称不会衰减为指针,因此会给出整个数组的大小。