一道常见的C语言面试题
32位C程序
char str[] = “Hello”;
char *p = str;
求sizeof(str)与sizeof(p)
初看我们可能会认为两个都是6,但实际的答案是
sizeof(str):6
sizeof(p):4
相同与不同:
1、 输出字符串时,数组的首地址和指针作用相同
2、 对数组进行操作时,同样可以用相应的指针进行操作
3、 自定义函数的参数传递时,数组与指针的作用类似
数组str[]与指针p的在内存的位置不同。
指针p储存的是str[]数组的首地址,是4个字节的,sizeof(p)可以理解为sizeof(char *);
而数组str[]是在这个地址上的储存字符串,实际的值长6个字节,str是这个数组的标识符,sizeof(str)可以理解为数组的大小str[5]。
结论:
对指针进行sizeof(p)运算,得到的始终是指针的大小;
对数组名进行sizeof(str)运算,得到的才是数组的大小。
当把数组名用于sizeof的操作数时(此时数组名代表数组,而不是指针),得到的是整个数组所有元素所占的字节总数,即元素个数×类型字节数。
如果数组名用于其它场合,都是将其视为指针。