是否有可能8字节内存输入4字节?没有损失?

时间:2016-01-18 15:25:39

标签: c pointers

#include <stdio.h>


int main() {

char* str = "abcdefg";
}

当我编译sizeof(str)时,是4个字节,但是abcdefg有8个字节,

    printf("str >> %s\n", str + 1);

此代码已粉碎,这意味着,str只有4个字节,

abcdefg在哪里?

我认为,char * str指向abcedfg地址。然后,abcdefg存在于内存中。可以?因此,

char * str在系统中使用4bytes + 8bytes?

2 个答案:

答案 0 :(得分:3)

sizeof(str)返回指针的大小,即4个字节。

修改

实际上,指针的大小取决于您的系统。对于32位,它是4.对于64位,它可能是8。

答案 1 :(得分:2)

将字符串文字分配给char 指针时,sizeof会产生系统上指针的大小。如果您想知道字符串文字占用多少内存,请将其分配给char 数组

char str[] = "abcdefg";
printf("%zu\n", sizeof(str));

这会产生8,如预期的那样(demo)。