我是 C
语言的新手。
在学习char
数组的过程中,我有一个疑问。
我知道指向数组的指针是数组第一个元素的地址。下面的代码是完美的:
char* c1 = "test"
printf("%s\n",c1); =>[output] "test"
但我认为c1
是字母“t”的地址,比如“00x1928”。所以,*c1
是对 c1
的反向引用:
char* c1 = "test"
printf("%s\n",*c1) => error!
为什么这段代码是错误的?
最佳答案
*c1
取消引用指针 c1
,它被声明为指向 char
。因此,*c1
是单个char
,需要使用%c
而不是%s
来打印。要打印多个 字符,您需要%s
,为此您需要一个指针,例如c1
,但不是一个单独的 char
,例如 *c1
。
"test"
之类的字符串文字是常量;你不能覆盖它们。为防止意外覆盖,始终将指向字符串文字的指针声明为 const
:
const char* c1 = "test"
printf("%s\n",c1);
如果启用编译器警告(总是一个好主意,尤其是在学习时),您应该会收到针对原始代码的警告。
关于c - 指针类型的char数组的反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58483570/