C 8字节内存是否可以输入4字节?没有损失?
这段代码被压碎了,这意味着str只有4个字节 abcdefg在哪里 我想,char*str指向abcedfg地址。然后,abcdefg存在于内存中。是吗?所以, char*str在系统中使用4字节+8字节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,正如预期的那
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));