由于未知原因传递给函数时,数组大小正在减小

时间:2014-01-10 00:54:01

标签: c arrays

我试图在函数内部(main()函数之外)找到数组中的元素数。该过程的一部分是以字节为单位查找数组的大小,但是当我将数组的大小传递给函数后,它比应该的数量少4个字节。

这是我的代码的精简版本,它打印出main函数中数组的大小,然后打印出已传递给函数的数组的大小。这些尺寸应该相同,但情况并非如此。

#include <stdio.h>

int main()
{
    // Initialize variables
    int numbers[3];

    // Request user to input an integer 3 times
    int i ;
    for(i = 0; i < 3; i++)
    {
        printf("Please enter an integer: ");
        scanf("%d", &numbers[i]);
    }

    // Print size of array outside of function
    printf("Size of numbers: %d\n",sizeof(numbers)); // Prints "12"

    // Get size of array in function
    printf("Size of n: %d\n", debug(numbers)); // Prints "8"

    // End main loop function
    return 0;
}

int debug(int n[])
{
    // Return the size of the array inside the function
    return(sizeof(n));
}

此代码输出:

Size of numbers: 12
Size of n: 8

知道可能导致此问题的原因是什么?它总是报告比应该少4个字节。

2 个答案:

答案 0 :(得分:2)

你不能真正地将数组传递给(或从它们返回)函数,它们会降级为指向第一个元素的指针。您的第二个sizeof实际上是sizeof int*,而不是sizeof int[3]

答案 1 :(得分:2)

函数8中的debug是数组开头的64位地址中的字节数。数组通过其地址传递给函数。 C不携带数组的大小及其地址。这必须单独传递。