C数组的标识符是转换为指向数组第一个元素的指针还是指向数组第一个元素的地址?

np8igboo  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(91)

一本C书说“当数组标识符出现在表达式中时,标识符的类型从“数组T'转换为“指向T的指针”,标识符的值转换为指向数组第一个元素的指针”。
然而,C编程语言(Kernighan和里奇)说:“根据定义,数组类型的变量或表达式的值是数组元素零的地址”。
1.所以说“数组标识符被转换为指向数组第一个元素的指针,或者数组标识符被转换为第一个元素的地址”是正确的吗?
这让我有点困惑……
看看这个小代码:

int a = 10;
&a;

字符串
2)&a是一般意义上的“指针”吗(即使一个指针在技术上是一个变量,它保存另一个变量的地址)?那么,对象的地址是否被认为是指向该位置的一般意义上的“指针”,即使它没有被赋予指针变量?
3)如果我做类似((&a)+ 1)的事情,我在技术上做指针算术,所以它有点暗示&a在某种程度上是一个指针,不是吗?

pcww981p

pcww981p1#

“指针”和“地址”在某种程度上可互换使用。指向X的指针和X的地址在很大程度上是同一件事。
当我们试图做出细微的区分时,我们可能会将“指针”作为C语言中的对象,其值提供对对象或函数的引用,而“地址”作为一个值,告诉对象在内存中的位置。(一个地址也可以告诉一个函数在哪里,或者至少它的入口点在哪里,但这更复杂。)“指针”也可以用来指与特定指针类型相关联的地址。
在这种更精细的意义上,地址是指针的值,就像整数是int的值一样。尽管如此,我们经常不太精确的语言和指的是“int 3”,而不是“int值3”。
在大多数情况下,您可以将“指向数组第一个元素的指针”和“数组第一个元素的地址”视为同一事物。

相关问题