char指针如何包含字符串?

char指针如何包含字符串?,c,C,如果我在C程序中定义一个字符指针并将其初始化为“某个字符串” 有人能解释一个应该包含地址的字符指针如何包含字符串吗 这与指针的定义不矛盾吗?我错过了什么 例如: char pointer=" how is it possible at all ? "; printf("%s",pointer); 字符串文字,比如“怎么可能?”实际上是编译器存储在某处的只读字符数组 当你这样做的时候 char *pointer=" how is it possible at all ? "; 初始化指针以指向

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

有人能解释一个应该包含地址的字符指针如何包含字符串吗

这与指针的定义不矛盾吗?我错过了什么

例如:

char pointer=" how is it possible at all ? ";
printf("%s",pointer);

字符串文字,比如
“怎么可能?”
实际上是编译器存储在某处的只读字符数组

当你这样做的时候

char *pointer=" how is it possible at all ? ";
初始化
指针
以指向该数组的第一个元素

这与

const char string[] = " how is it possible at all ? ";
char *pointer = &string[0];  // Make pointer point to the first character in the array

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


因为字符串文字是只读的,所以在指向它们的指针时,应该真正使用
const char*
。C允许纯非常量
char*
,但编译器可能无法检测到修改只读文本的尝试,从而导致语句中出现。

char *pointer=" how is it possible at all ? ";
“怎么可能?”
是字符串文字,字符串文字是字符数组

除非是sizeof运算符的操作数、_Alignof运算符或一元&运算符,或者是用于初始化数组的字符串文字,否则类型为“类型的数组”的表达式将转换为类型为“指向类型的指针”的表达式,该表达式指向数组对象的初始元素,而不是左值


因此,作为数组的字符串文字衰减为
char

类型的指针指针指针是一个符号。如果你看到一个写着湖的标志,那并不意味着这个标志包含了湖。
char*
表示指向
char
的指针,这意味着
char
的地址。在该地址处,可能有一个
字符
,或者内存中可能有一整行(数组)字符。在C语言中,字符串是以null(0)结尾的字符数组。因此,
char*
不包含字符串,但可以是字符串的地址或指针。如果您声明
char*p
您需要将
p
设置为包含或可以容纳以零结尾的字符数组的有效地址。我假设
char-pointer
实际上是指
char*pointer
?上述代码就是您在问题中提到的。请检查gcc中的警告:<代码>警告:初始化从指针生成整数,无需强制转换[-Wint conversion]char-pointer=“怎么可能?”;^:警告:格式“%s”要求参数类型为“char*”,但参数2的类型为“int”[-Wformat=]printf(“%s”,指针)是字符指针我的意思是字符*指针应该是
字符字符串[]=“怎么可能?”;字符*指针=&字符串[0]
const char*pointer=“这怎么可能?”