#include <string.h>
#include <stdio.h>
int main()
{
char *s1 = "abcdef";
char s2[] = { "abcdef" };
char *s3[] = { "abcdef" };
printf("%d\n%d\n%d\n", sizeof(s1), sizeof(*s1), sizeof(s2));
printf("**********\n");
printf("%d\n%d\n", sizeof(s3), sizeof(*s3));
return 0;
}
/*
输出:
4
1
7
**********
4
4
*/前面我都理解,sizeof(s1)是指针变量 所占内存 4个字节,sizeof(*s1)是指针指的第一个字符串常量所占字节char类型占1个字节,sizeof(s2)是char型数组s2分配的内存7个字节,sizeof(s3)同理,指针变量4个字节,就这个 sizeof(*s3)为什么是4。。 不是很懂。。饶糊涂了。
8 回答
onemoo
TA贡献883条经验 获得超454个赞
s3 是个数组,但因为存在数组向指针的隐式转型,所以 *s3 这样使用时,数组就相当于指向数组首元素的指针,也就是 *s3 就是解引用指向数组首元素的指针:
*s3 就是 s3 数组的第一个元素,也就是字符指针,那么指针的 size 自然是 4 byte 了。
- 8 回答
- 1 关注
- 4633 浏览
添加回答
举报
0/150
提交
取消