홍정민*_*홍정민 0 c arrays pointers implicit-conversion
我是这门C语言的新手。在研究char数组时,我有一个问题。
我知道一个指向数组的指针是数组的第一个元素的地址。下面的代码是完美的:
char* c1 = "test"
printf("%s\n",c1); =>[output] "test"
Run Code Online (Sandbox Code Playgroud)
但是我认为那c1是字母“ t”的地址,例如“ 00x1928”。因此,*c1是对以下内容的反向引用c1:
char* c1 = "test"
printf("%s\n",*c1) => error!
Run Code Online (Sandbox Code Playgroud)
为什么此代码是错误的?
*c1取消引用指针c1,该指针声明为指向char。因此,*c1是单个char,需要使用%c代替进行打印%s。要打印多个字符,您需要%s,而您需要一个指针,例如c1,但不需要一个个人,char例如*c1。
像这样的字符串文字"test"是常量;您不能覆盖它们。为防止意外覆盖,请始终将指向字符串文字的指针声明为const:
const char* c1 = "test"
printf("%s\n",c1);
Run Code Online (Sandbox Code Playgroud)
如果启用编译器警告(总是一个好主意,尤其是在学习时),则应该为原始代码获得警告。