Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 8字节内存是否可以输入4字节?没有损失?_C_Pointers - Fatal编程技术网

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

C 8字节内存是否可以输入4字节?没有损失?,c,pointers,C,Pointers,这段代码被压碎了,这意味着str只有4个字节 abcdefg在哪里 我想,char*str指向abcedfg地址。然后,abcdefg存在于内存中。是吗?所以, char*str在系统中使用4字节+8字节 sizeof(str)返回指针的大小,即4个字节 编辑: 实际上,指针的大小取决于您的系统。对于32位,它是4。对于64位,它可能是8。当您将字符串文字指定给char指针时,sizeof生成系统上指针的大小。如果要知道字符串文字占用的内存量,请将其分配给char数组: 这将产生8,正如预期的那

这段代码被压碎了,这意味着str只有4个字节

abcdefg在哪里

我想,char*str指向abcedfg地址。然后,abcdefg存在于内存中。是吗?所以,

char*str在系统中使用4字节+8字节

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

编辑


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

当您将字符串文字指定给
char
指针时,
sizeof
生成系统上指针的大小。如果要知道字符串文字占用的内存量,请将其分配给
char
数组:


这将产生
8
,正如预期的那样()。

要获得字符串的长度,请始终使用
strlen
。此外,如果
str
实际指向字符串文本
“abcdefg”
,则打印
str+1
不会崩溃。最后,使用
char*
指向字符串文字时要小心,因为它们是只读的,不应修改(如果使用
char*
,则可能发生这种情况),而应使用
const char*
。指针不被称为“数组”(反之亦然)是有原因的。
#include <stdio.h>


int main() {

char* str = "abcdefg";
}
    printf("str >> %s\n", str + 1);
char str[] = "abcdefg";
printf("%zu\n", sizeof(str));