c - 指针类型的char数组的反向引用

标签 c arrays pointers implicit-conversion

我是 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/

相关文章:

c - C中读取空字符串的方法

c - 使用sscanf从c中的字符串中提取

c - 返回指针数组

iphone - 指向 Objective-C 中的指针的指针

mysql - 无法更新mysql中的列

java - 必须在 GetStringUTFChars 之后调用 ReleaseStringUTFChars(将 char* 传递给 C 函数时)?

python - "Less/greater than"N维和(N-k)维numpy数组的比较

javascript - 为导航菜单创建 "selected item"javascript 代码?

c++ - 如何借助指针按数组元素的余弦对数组进行升序排序?

c - 函数指针数组指针用作函数的返回值