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

#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。。 不是很懂。。饶糊涂了。

linuxnewbie
浏览 4635回答 8
8回答

onemoo

s3 是个数组,但因为存在数组向指针的隐式转型,所以 *s3 这样使用时,数组就相当于指向数组首元素的指针,也就是 *s3 就是解引用指向数组首元素的指针: *s3 就是 s3 数组的第一个元素,也就是字符指针,那么指针的 size 自然是 4 byte 了。

linuxnewbie

刚提完问题突然有点明白了。。。额。char *s3[] 定义了一个指针数组每个元素都是一个指针,sizeof是4。。
打开App,查看更多内容
随时随地看视频慕课网APP