美烦资源网

专注技术文章分享,涵盖编程教程、IT 资源与前沿资讯

菜鸟学C_sizeof()的数组与指针的区别

一道常见的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的操作数时(此时数组名代表数组,而不是指针),得到的是整个数组所有元素所占的字节总数,即元素个数×类型字节数。

如果数组名用于其它场合,都是将其视为指针。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言