int a[3][4] = { { 1,2,3,4 },{ 5,6,7,8 },{ 9,10,11,12 } };
一、地址
a或a+0 | 首行的地址 |
a[0] | 首行的地址 |
&a[0] | 首行的地址 |
a+m | 第m行的首地址 |
a[m] | 第m行的首地址 |
&a[m] | 第m行的首地址 |
&a[0]+m | 第m行的首地址 |
&a[0][0]+m | 二维数组是一维存储,m为索引号,获取元素地址 |
&a[m][n] | 第m行n列元素的地址 |
a[m][n] | 第m行n列元素 |
a[m]+n | 第m行n列元素的地址 |
*(a[m]+n) | 第m行n列元素 |
*(a+m)+n | 第m行n列元素的地址 |
*( *(a+m)+n) | 第m行n列元素 |
int brr[3][4] = { { 1,2,3,4 },{ 5,6,7,8 },{ 9,10,11,12 } };
cout << brr <<" "<< brr + 1 <<" "<< brr + 2 << endl;
cout << brr[0] <<" "<< brr[1] <<" "<< brr[2] << endl;
cout << &brr[0]<<" "<< &brr[1] <<" "<< &brr[2] << endl;
cout << &brr[0]<<" "<< &brr[0]+1<<" "<< &brr[0]+2 << endl;
cout << &brr[0][0] << " " << &brr[0][0] + 4 << " " << &brr[0] + 8 << endl;
cout << endl;
cout << &brr[0][3] << " " << &brr[1][3] << " " << &brr[2][3] << endl;
cout << brr[0][3] << " " << brr[1][3] << " " << brr[2][3] << endl;
cout << brr[0]+3 << " " << brr[1]+3 << " " << brr[2]+3 << endl;
cout << *(brr[0] + 3) << " " << *(brr[1] + 3) << " " << *(brr[2] + 3) << endl;
cout << *(brr+0) + 3 << " " << *(brr+1) + 3 << " " << *(brr+2) + 3 << endl;
cout << *(*(brr + 0) + 3) << " " << *(*(brr + 1) + 3) << " " << *(*(brr + 2) + 3) << endl;
二、二维数组的物理存储
三、数组指针与指针数组1
- 数组指针:
int (*p)[4]:p是一个指向整型数组的指针,简称数组指针,重点在于一定是个指针,数组起修饰作用
- 指针数组:
int *p[4]:是一个保存指针的数组
总结:当遇到复杂的考虑两点
-
优先级
() >[ ]> * -
指向
1) 若是指针(带*号),则看指向什么东西
2) 若指向数组(带[]),则看长度和数据类型
3) 若是函数(带小括号()),则看参数列表和访问值
https://blog.csdn.net/xiaobaibai915/article/details/79943659 ↩︎