当我运行以下程序时,我得到不同的数组大小。我厌倦了不同的方式,但结果是一样的,我可能做错了什么?
#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;
}
答案 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 *)`