<分区>
下面是代码(用gcc编译):
#include <stdio.h>
#include<string.h>
int main()
{
char *c="hello";
printf("1) sizeof 'hello' : %d \n",sizeof("hello"));
printf("2) sizeof '*c' : %d \n",sizeof(*c));
printf("3) sizeof 'c': %d \n",sizeof(c));
printf("4) sizeof '&c' : %d \n",sizeof(&c));
printf("5) sizeof '&hello': %d \n",sizeof(&("hello")));
printf("\n");
return 0;
}
给定程序的输出:
1) sizeof 'hello' : 6
2) sizeof '*c' : 1
3) sizeof 'c': 8
4) sizeof '&c' : 8
5) sizeof '&hello': 8
因此,对于情况 1) 和 2),为什么会出现此输出没有问题。
但是对于其余情况,即 3)、4) 和 5),为什么 sizeof
运算符给出 8?
据我所知,&c
、c
和 &"hello"
代表同一事物,即一组字符(即 c
指向 'hello') 而 *c
代表单个字符(即 *c
指向 'h')。
那么,为什么 sizeof(c)
给出 8 而不是 6?这个8是怎么算出来的?