在32位机器上,有如下代码:
void func0(){ char array[] = "abcdefg"; printf("%d ", sizeof(array)); const char *p = "abcdefg"; printf("%d ", sizeof(p)); } void func1(char p[10]) { printf("%d ", sizeof(p)); } void func2(char (&p)[10]) { printf("%d ", sizeof(p)); } int main() { char p[10] = "hello"; func0(); func1(p); func2(p); printf("%d ", sizeof(char[2])); printf("%d ", sizeof(char &)); return 0; }
sizeof求数组时,大小等于数组元素个数*每个元素的大小(其中,计算字符串数组是需要计算结束符'\0',这是与strlen的区别,strlen不计算最后的'\0'),但是当数组是函数的形参时会将会降为指针,在32位系统中无论什么指针类型都是占4个字节
所以:
第1个printf输出:8
第2个printf输出:4
第3个printf输出:4
对于第4个,p是 int[10]的引用,所以
第4个printf输出:10
第5个printf输出:2
第6个printf输出:1