关于char指针,sizeof运算符如何工作?

See*_*heC 1 c c++ gcc g++

下面是代码(用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;
}
Run Code Online (Sandbox Code Playgroud)

给定程序的输出:

1) sizeof 'hello' : 6                                                                               
2) sizeof '*c' : 1                                                                                  
3) sizeof 'c': 8                                                                                    
4) sizeof '&c' : 8                                                                                  
5) sizeof '&hello': 8 
Run Code Online (Sandbox Code Playgroud)

因此,对于情况1)和2),为什么这个输出没有问题.但对于剩下的情况,即3),4)和5),为什么sizeof算子给出8?

据我所知&c,c&"hello"代表相同的东西,即一组字符(即c指向'你好')并*c代表一个字符(即*c指向'h').

那么,为什么sizeof(c)给8而不是6?从8的计算是什么?

Col*_*mbo 6

sizeof只检查论证的类型,而不是它的价值.
"hello"是一个左右的类型char const[6].数组对象的大小就是元素的大小乘以绑定的大小.大小char定义为1,因此sizeof *c为1,并且sizeof "hello"是6*1 = 6.

指针通常大4或8字节 - 在您的平台上它是8,如值的所示
sizeof c.
sizeof (&c)sizeof(&("hello"))给你相同的输出sizeof c.再一次,只是指针的大小.