【发布时间】:2017-11-21 16:43:15
【问题描述】:
请考虑以下声明:
char str1[5];
char str2[] = "1234";
char *str3 = malloc(sizeof(char) * 5);
打印每个str的大小:
printf("str1 has size %ld\n", sizeof(str1));
printf("str2 has size %ld\n", sizeof(str2));
printf("str3 has size %ld\n", sizeof(str3));
输出是:
str1 has size 5
str2 has size 5
str3 has size 8
我知道指针的大小是 8 个字节。 3种情况下,str是一个指针,*str对应字符串str的第一个字符:在3种情况下,它的大小是1字节,也就是一个char的大小。
如果我让程序用char str[] = "1234" 或char str[5]; 为str 分配5 个字节的内存,那么str 的大小是5 个字节。但是当我用malloc给char *str分配5个字节时,str的大小还是8个字节,也就是一个指针的大小。我希望str3 的大小与我使用malloc 分配给它的内存量相对应。
为什么我错了?
【问题讨论】:
-
因为前两个是五个
chars的数组,而最后一个是指针。分配给str3的内容无关紧要,sizeof的结果不会改变。 -
sizeof不会告诉你数据的大小;只是 type 的大小。sizeof char[5]是5。sizeof char[100]为 100。sizeof char *始终为 8(在您的机器上);