-3
#include <stdio.h>
#include <string.h>

int fashion (int[]);
main()
{   
    int a[]={3,2,5,1,3};

    int size;
    size= sizeof a/sizeof (int);

    printf("size of array %d\n",sizeof(a)); //size of the array
    printf("size of int %d\n",sizeof(int)); //size of the int
    printf("lenght of array %d\n",size);    //actual length of the array
    fashion(a);

    return 0;
}   
int fashion(int input1[])  //tried with int fashion(int *input1)
{
    int size;
    size= sizeof input1/sizeof (int);

    printf("\nin function\n");
    printf("size of array %d\n",sizeof(input1)); //size of the array
    printf("size of int %d\n",sizeof(int)); //size of the int
    printf("lenght of array %d\n",size);    //actual length of the array

}

下面是代码的输出:

output is
size of array 20
size of int 4
lenght of array 5

In function
size of array 8
size of int 4
lenght of array 2

主函数和调用函数中的代码相同,但结果不同。

为什么数组的大小在主函数中更改为 20 而在函数中更改为 8?谁可以使两个结果相同?

我什至尝试过使用 Fashion(int input1[]) 但结果相同。

4

1 回答 1

0

这与不同的打字有关。sizeof是编译器运算符,而不是运行时函数。

a是 类型int[5],这正确导致大小为5*4 = 20

input1int *与 a 大小相同的类型void *sizeof(int *) = sizeof(void *)通常4在 32 位系统和864 位系统上(您的系统似乎是)。

通常,在将数组传递给函数时,您将指针传递给第一个元素(如在您的函数中),另外将数组的长度作为单独的参数传递。

于 2013-06-21T10:41:29.977 回答