c++中对指针引用的查询

问题描述 投票:0回答:1

代码:

int int_array[5] = {1, 2, 3, 4, 5};
   std::cout << int_array << " " << &int_array << " " << *(&int_array) << " " << **(&int_array) << " " << " " << *(int_array) << std::endl;   
   
   for (int i=0;i<5;i++) {
      std::cout << i << " " << int_array[i] << " " << &int_array[i] << " " << *(&int_array[i]) <<  std::endl;
   } 

输出:

0xd1a03ff9e0 0xd1a03ff9e0 0xd1a03ff9e0 1  1
0 1 0xd1a03ff9e0 1
1 2 0xd1a03ff9e4 2
2 3 0xd1a03ff9e8 3
3 4 0xd1a03ff9ec 4
4 5 0xd1a03ff9f0 5

数组表:

价值 地址
1 0xd1a03ff9e0
2 0xd1a03ff9e4
3 0xd1a03ff9e8
4 0xd1a03ff9ec
5 0xd1a03ff9f0

int_array :int_array、&int_array、*(&int_array) 的输出均为 0xd1a03ff9e0 。

查询1:*(&int_array)怎么是0xd1a03ff9e0?正如我们所看到的 &int_array 是 0xd1a03ff9e0 , * 到 0xd1a03ff9e0 不应该等于 1 吗? 查询2:int_array变量值和内存是什么样的?

c++ pointers
1个回答
1
投票

数组不是指针,也不是单个元素。

查询1:*(&int_array)怎么是0xd1a03ff9e0?

int_array
是一个数组。

&
是操作员的地址。
&int_array
是一个指向 5 个整数数组的指针,一个
int(*)[5]

*
是解引用运算符。
*(&int_array)
是原始数组。

当您将数组传递给函数时,它会衰减为指向其第一个元素的指针,即

int*
。指向第一个元素的指针的值与指向整个数组的指针的值相同(但它们的类型不同!)。这将我们带到...

查询2:int_array变量值和内存是什么样的?

数组由连续的元素组成。

[ 0 ][ 1 ][ 2 ][ 3 ][ 4 ]    // < - 5 consecutive integers in memory
  ^
  pointer to the array &int_array points here
  ^
  pointer to first element &int_array[0] points here
© www.soinside.com 2019 - 2024. All rights reserved.