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

标签 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;
}

给定程序的输出:

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?

据我所知,&cc&"hello" 代表同一事物,即一组字符(即 c 指向 'hello') 而 *c 代表单个字符(即 *c 指向 'h')。

那么,为什么 sizeof(c) 给出 8 而不是 6?这个8是怎么算出来的?

最佳答案

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 相同的输出。同样,只是指针的大小。

关于c++ - 关于 char 指针,sizeof 运算符如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28137719/

相关文章:

gcc - .p2align 在 asm 代码中起什么作用?

c++ - (number & -number) 在位编程中是什么意思?

c - 如何在没有 __uuidof 的情况下从 C 调用 DXGI

c - 确定 "stat()"返回的有效时间戳精度

c++ - Eclipse CDT 使用主项目编译器设置编译静态库

c - 是否可以告诉分支预测器跟随分支的可能性有多大?

c++ - 如何使用 Eigen 和 OpenMP 最大化 CPU 使用率

C++ 计时器类未编译,我不明白为什么

c++ - 检查指针是否指向堆上分配的内存

C中字符变量字符串的大小