数组索引和地址返回相同的值

时间:2010-09-04 12:02:55

标签: c++ c arrays pointers

#include<stdio.h>
int main(void) {
  int a[3] = {1,2,3};
  printf("\n\t %u %u %u \t\n",a,&a,&a+1);
  return 0;
}

现在我不明白为什么a和&amp; a返回相同的值,它背后的推理和实际应用是什么?还有什么类型的&amp; a,我也可以做&amp;(&amp; a)?

1 个答案:

答案 0 :(得分:10)

  

现在我不明白为什么a和&amp; a返回相同的值,是什么原因

a是衰减指向数组第一个元素的数组的名称。 &a只是数组本身的地址,尽管a&a打印的是相同的值,但其类型不同。

  

还有什么类型的&amp; a?

指向包含三个int s的数组的指针,即int (*)[3]

  我可以做&amp;(&amp; a)吗?

不,运算符的地址要求其操作数为左值。数组名称是不可修改的左值,因此&a是合法的,但&(&a)不合法。

打印类型为&a仅限C ++

#include <typeinfo>
#include <iostream>

int main()
{
   int a[]={1,2,3};
   std::cout<< typeid(&a).name();
}

<强> P.S:

使用%p格式说明符打印地址(在printf中使用不正确的格式说明符调用未定义的行为)