char 指针中怎么能包含字符串呢?

Hod*_*929 2 c

如果我在 C 程序中定义一个 char 指针并将其初始化为“某个字符串”

有人可以解释一下应该在其中保存地址的 char 指针如何在其中保存字符串吗?

这不是和指针的定义矛盾吗?我在这里缺少什么?

例如 :

char pointer=" how is it possible at all ? ";
printf("%s",pointer);
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 6

字符串文字实际上"how is it possible at all ? "是由编译器存储在某处的只读字符数组。

当你这样做时

char *pointer=" how is it possible at all ? ";
Run Code Online (Sandbox Code Playgroud)

您初始化pointer为指向该数组的第一个元素。

这非常类似于

char string[] = " how is it possible at all ? ";
char *pointer = &string[0];  // Make pointer point to the first character in the array
Run Code Online (Sandbox Code Playgroud)

指针本身的工作方式取决于编译器和目标体系结构,但大多数时候它们是简单的整数,其值是它们指向的内存的地址。然后编译器会专门处理它们,并将指针的使用转换为正确的机器代码指令以访问指针所指向的内存。


因为字符串文字是只读的,所以这就是您const char *在创建指向它们的指针时应该真正使用的原因。C 允许普通非常量char *,但编译器可能无法检测到修改只读文字的尝试,这会导致未定义的行为