c - 数组如何像 C 中的指针一样工作?

标签 c

我知道这个问题已经回答了好几次,但我无法理解以下脚本。顺便说一下,我是 C 语言的新手。

据我所知,如果一个数组用作值,它表示第一个字符的地址,也就是指针。

如果我运行这个:

int main (){
  char quote[] = "C is great"
  printf ("The quote: %s\n",quote);
  printf ("The address of quote is %p\n",quote);
  printf ("Size of quote is %lu\n",sizeof(quote));
}

我得到:

The quote: C is great
The address of quote is 0x7fff06fa0d90
Size of quote is 11

所以我的问题是在所有 printf 情况下,我使用了相同的变量引号,但是通过更改打印类型,它如何从值变为指针以及指针表示存储在哪里,因为 sizeof 给出了字符串的长度。

谢谢!

最佳答案

指针表示未存储在指定位置。它与 2 + 2 的结果具有相同的“存储”。 (通常,这将是一个寄存器)。这些在 C 中被正式称为;有时出于讨论目的称为右值

quote 作为参数传递给 printf 的两种情况都会发生转换。 %s%p 告诉 printf 是否输出接收到的指针的表示,或者是否跟随该指针并打印出另一端的字符。

右值在需要时形成。 sizeof 运算符不会对其操作数执行左值到右值的转换,因此 sizeof(quote) 不会生成指针或对其执行任何操作。

关于c - 数组如何像 C 中的指针一样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28892650/

相关文章:

c - 在 ARM (SabreLIte) 上实现 AODV 时出错

c - 如何在函数中打印出大于9?

c - 从以下代码中获取警告 "cast to pointer from integer of different size"

c - 如何在C中将值存储在动态数组中

c - 按执行顺序列出函数

python - gcc 链接器的问题 - 为 python 编译 c 函数

c - 当我删除第一个节点时,它会生成无限循环错误

c - 为什么我们在引用结构中的数组元素时使用指针而不是索引

c - 结构初始化

在 C 中释放内存时无法理解此错误