2014-01-10 41 views
1

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

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

#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个字节。

+0

您正在期待Pascal,Fortran或脚本语言的行为。 C不会那样工作。 – wallyk

回答

2

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

+0

至少我可以传递数组元素吗?然后只需将尺寸作为第二个参数传递? – JoeyParis

+0

@JoeyParis:这是通常的解决方案。传递数组(衰减到指针)并传递元素数。 – Blastfurnace

+0

@Blastfurnace好的,我会给你一个镜头。谢谢! – JoeyParis

2

在功能debug8是在64位的地址阵列的开头的字节数。数组通过地址传递给函数。 C不会携带数组的大小和地址。这必须分开传阅。