为了账号安全,请及时绑定邮箱和手机立即绑定

新人求解,关于char *s 与char s[] 的sizeof问题

新人求解,关于char *s 与char s[] 的sizeof问题

C
linuxnewbie 2017-09-15 11:58:42
#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 了。

查看完整回答
反对 回复 2017-09-15
?
linuxnewbie

TA贡献1条经验 获得超0个赞

刚提完问题突然有点明白了。。。额。

char *s3[] 定义了一个指针数组每个元素都是一个指针,sizeof是4。。

查看完整回答
反对 回复 2017-09-15
  • 8 回答
  • 1 关注
  • 4589 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信