不同的阵列大小

时间:2013-04-25 13:00:08

标签: c sizeof

当我运行以下程序时,我得到不同的数组大小。我厌倦了不同的方式,但结果是一样的,我可能做错了什么?

#include<stdio.h>

void array_size(char *a[])
{
    printf("Func Array Size: %d\n", sizeof(a));
}

int main()
{
    char *str_array[]={"one", "two", "three"};

    printf("Array Size: %d\n", (int)sizeof(str_array));

    array_size(str_array);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

在函数main str_array中是一个包含三个char *的数组。

函数array_size的参数a只是一个指针。调用array_size时,编译器不会动态传递数组长度信息。

一个指针的大小不等于三个char *指针的大小。

答案 1 :(得分:-1)

这是因为sizeof是内置的编译器而不是运行时函数。它被硬编码到二进制文件中。

`sizeof((char *)[]) = sizeof(a) = sizeof(void *)`
`sizeof(str_array) = sizeof({"one", "two", "three"}) = 3 * sizeof(char *)`