C++ 数组地址

C++ 数组地址,c++,arrays,pointers,memory-address,C++,Arrays,Pointers,Memory Address,u的输出是有意义的 我知道t和&t[0]应该具有相同的值,但是&t为什么也具有相同的值呢?&t实际上是什么意思?没有称为t的变量,因为您无法更改它。名称t仅指第一个元素的地址(也有与其相关联的大小)。因此,获取地址的地址实际上没有意义,C将其“折叠”为地址 函数的情况也会发生同样的情况: 0045FB88 0045FB88 0045FB88 0045FB7C 这应该打印相同的内容,因为没有保存foo地址的变量,可以依次获取其地址。t的实际类型是int[10],因此&t是数组的地址 另外,int

u
的输出是有意义的


我知道
t
&t[0]
应该具有相同的值,但是
&t
为什么也具有相同的值呢?&t实际上是什么意思?

没有称为
t的变量,因为您无法更改它。名称
t
仅指第一个元素的地址(也有与其相关联的大小)。因此,获取地址的地址实际上没有意义,C将其“折叠”为地址

函数的情况也会发生同样的情况:

0045FB88 0045FB88
0045FB88 0045FB7C

这应该打印相同的内容,因为没有保存
foo
地址的变量,可以依次获取其地址。

t
的实际类型是
int[10]
,因此
&t
是数组的地址


另外,
int[]
隐式转换为
int*
,因此
t
转换为数组第一个元素的地址。

在表达式中单独使用
t
时,会发生数组到指针的转换,这会生成指向数组第一个元素的指针


t
用作
&
运算符的参数时,不会发生此类转换。
&
然后显式获取
t
(数组)的地址
&t
是指向整个数组的指针


数组的第一个元素在整个数组的起始位置与内存处于相同的位置,因此这两个指针具有相同的值。

是C++,并且有一个变量叫做“代码> t<代码>。您可以将其传递给函数,该函数接受类型为
int(&)[10]
-1的参数“没有名为t的变量,因为您无法更改它。”这是不正确的。在声明中命名的对象称为变量。查找标准。·转换为指针的
t
&t
之间的唯一区别是指针类型。后者的referent形式上是数组类型,因此向其中添加1会将其移动很多(移动到内存中的下一个这样的数组)。而前者的referent是元素类型。术语:在[comp.lang.c++]Usenet组中,有一个关于像
u
这样的指针是否可以被称为“指向”数组的争论,因为它的引用对象不是数组类型。通过指出该标准使用了此类措辞,这一问题被解决了无数次。Cheers&hth.,&u是对整数指针的引用,您通常使用它作为某些函数的参数。谢谢!我想是隐式数组到指针的转换让我产生了一种错误的想法,认为
u
是指针。@quuxbazer:
u
是指针
t
是一个数组
int*u=t
将数组到指针的转换应用于
t
,并用结果初始化
u
。@Johanneschaub litb:我想知道这种情况下的正确描述。
(e?a:n)
例如,如果两边都有相同的数组类型,则不会生成指针。@Johanneschaub litb:我不认为这会使这个答案无效。当然,在某些情况下,数组到指针的转换不会发生。然而,在这种情况下,它们正在发生。
0045FB88 0045FB88
0045FB88 0045FB7C
int foo(void)
{
  return 12;
}

printf("%p and %p\n", (void *) foo, (void *) &foo);