Shu*_*am 2 c++ arrays pointers multidimensional-array c++11
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[101][101];
a[2][0]=10;
cout<<a+2<<endl;
cout<<*(a+2)<<endl;
cout<<*(*(a+2));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么a + 2和*(a + 2)的值相同?提前致谢!
a是一个2D数组,表示一个数组数组.但是当它在适当的上下文中使用时,它会衰减到指向数组的指针.所以:
a+2,a衰减到指向大小为101的int数组的指针.当你传递给ostream时,你得到这个数组的第一个元素的地址,即&(a[2][0])*(a+2)是由定义 a[2]的:它是尺寸101的阵列开始于a[2][0].它衰减到指向int的指针,当你将它传递给ostream时,你得到它的第一个元素的地址,它仍然是&(a[2][0])**(a+2)是定义 a[2][0].当你将它传递给ostream时,你得到它的int值,这里是10.但要注意:a + 2并且a[2]都是指向同一地址的指针(与之static_cast<void *>(a+2)相同static_cast<void *>(a[2])),但它们是指向不同类型的指针:首先指向大小为101的int数组,后者指向int.
| 归档时间: |
|
| 查看次数: |
4504 次 |
| 最近记录: |