-2

我在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?以及如何获得整个数组的大小?

4

3 回答 3

3
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;
}
于 2013-10-04T15:54:20.993 回答
1

这是不可能的,除非您使用 C99 并且数组是可变长度数组

一般来说,数组非常像 C 中的指针,在传递给函数时更是如此。

于 2013-10-04T15:53:11.907 回答
0

如果getnumber(array)您的数组名称array衰减为指针并给出它的大小4。在 的情况下sizeof,数组名称不会衰减为指针,因此会给出整个数组的大小。

于 2013-10-04T15:54:11.140 回答