代码:
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变量值和内存是什么样的?
数组不是指针,也不是单个元素。
查询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