由于不同位数的操作系统计算结果可能不同,下面是在32位的win7 下计算的。
1 对于直接的调用sizeof,如果是数组首地址,sizeof会输出数组所占地址空间的大小(字节为单位)。如果是一个指针的话,则输出在该系统中地址的字节宽度,即(位宽/8)。
#include <stdio.h>
int main()
{
char a[25];
char *b;
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(b));
return 0;
}
输出:
25
4
2 如果数组是作为函数的形参传递进来,那么函数会把这个数组首地址当做指针。
即: C语言中,数组名作为参数传递给函数时,退化为指针; 当函数需要数组大小时,至少需要传递两个参数:一个参数传数组名,另一个传数组大小。
#include <stdio.h>
void test_sizeof_addr(char *addr)
{
printf("%d\n", sizeof(addr));
}
void test_sizeof_array(char array[])
{
printf("%d\n", sizeof(array));
}
void test_sizeof_array_right(char array[],int size)
{
printf("%d , %d\n", sizeof(array),size);
}
int main()
{
char a[25];
test_sizeof_addr(a);
test_sizeof_array(a);
test_sizeof_array_right(a,sizeof(a));
printf("%d\n", sizeof(a));
printf("%d, %d\n", sizeof(int),sizeof(long));
return 0;
}
输出:
4
4
4 , 25
25
4, 4