0

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

#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;
}
4

2 回答 2

1

在函数 mainstr_array中是一个包含三个 的数组char *

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

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

于 2013-04-25T13:04:36.050 回答
-1

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

`sizeof((char *)[]) = sizeof(a) = sizeof(void *)`
`sizeof(str_array) = sizeof({"one", "two", "three"}) = 3 * sizeof(char *)`
于 2013-04-25T13:03:11.123 回答