我知道这个问题已经回答了好几次,但我无法理解以下脚本。顺便说一下,我是 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/