c - 为什么将字符串直接传递给 printf 可以正常工作?

标签 c string pointers printf

我知道在 C 中这两个都有效:

char* string = "foo";
printf("string value: %s", string);

更简单地说:

printf("string value: %s", "foo");

但我在问自己为什么。

我知道 %s 标识符期望参数是一个 char*,而 string 实际上是(它与字符数组相同,因为这两种数据类型在 C 中非常相同)

但是当我直接将一个字符串传递给 printf 时,它不应该有所不同吗?我的意思是 "foo" 不再是一个指针...对吧?

最佳答案

字符串常量 "foo" 的类型为 char []。当传递给函数时,数组会衰减为指针,即 char *。因此,您可以将它传递给期望相同的函数。

同理,你也可以传一个这种类型的变量:

char string[4] = "foo";
printf("string value: %s", string);

关于c - 为什么将字符串直接传递给 printf 可以正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38001846/

相关文章:

用于解析程序中标识符的 Python 包(C、Scala、Lisp)?

mysql - 我如何对大型 mysql 表中的单个列进行低安全性编码,然后反转它?

r - 根据两个字符列之间的差异创建 R data.frame 列

c - UTF-16 字符串终止符

java - Java 中类似指针的行为

C# 指针问题

c++ - C union 和 C++ union 有什么区别?

c - 数组返回一个额外的值

c - 初始化没有大小的数组字面量

c++ - 为什么我可以做 "delete p;",而不是 "delete (p+1);"?为什么 delete 需要左值?