见下图代码,注释表示问题,输出结果在最后:
int b[2][3]= {1,2,3,4,5,6};
cout<<b<<endl;
cout<<*b<<endl;
cout<<&b<<endl;
cout<<b[0]<<endl;
cout<<&b[0]<<endl;
cout<<*b[0]<<endl;//1.既然b[0]和b地址是一样的,为什么取value得到的结果不同,换言之为什么*b取到的仍然是地址?
cout<<"---------"<<endl;
cout<<(b+1)<<endl;
cout<<*(b+1)<<endl; // 2.此行和上一行输出结果一样,那下一行代码加*的作用是什么?
cout<<(*(b+1)+2)<<endl;
cout<<(b[1]+2)<<endl;
cout<<"---------"<<endl;
cout<<&b[0][5]<<endl;
cout<<&b[1][2]<<endl;
cout<<(b[0]+5)<<endl;
cout<<(b+5)<<endl; //3.2D->1D,为什么得到的不是第六个元素的地址呢?
Output:
PS:本人有强迫症囧...学数据结构的时候发现自己C/C++没学好...可是这样补基础是不是有点钻牛角尖啊...恳请有经验的人指导下...
指针算术运算和数组下标访问是等价的。C的多维数组在内存中是连续的线性结构。
int (*b)[3];
),所以*b的类型是长度为三的数组。