char str[]="Hello";
这为字符串分配了 6 个字节,但是如果我写
char *str = "Hello";
这会覆盖数据,因为它只是为了存储 1 个字符?所以我要问的是,当我声明一个字符串,但没有初始化它 (char str[12]; ) 时,是在此处保留 12 个字节还是在初始化它时?如果它们确实在这里被初始化,那么这意味着:
char *str;
只有 1 个字节被保留,但是当我让它指向一个字符串时,这不会覆盖超出它的界限的数据吗?
char *str;
不为内容保留任何数据。它是一个指针,大小可容纳内存地址。
char *str = "Hello";
{ 'H', 'e', 'l', 'l', 'o', 0 }
编译器已经将6 个字节存储在某处。现在你正在创建一个变量来保存它的地址(指向它)。不复制字符串内容。
char str[]="Hello";
你没看错,它是一个 6 char
s的数组
char *str = "Hello";
这是一个指向字符串文字的指针。某处有一个 6 char
s 的数组,而您的变量str
只是指向它。
char *str;
这不保留任何东西,它是一个指向不确定位置的指针。当你让它指向一个字符串时,它指向一个char
存在于其他地方的 s 数组,不涉及副本。