二维数组和二维指针的关系
2012-12-25 21:04
239 查看
对于一个二维数组a[m]
,虽然在内存中是线性排列的,但是我们可以想象成一个m行n列的二维矩阵。
假设我们声明并初始化了一个整形二维数组a[4][3]
int a[3][4] = {{1,2,3,4},{2,3,4,5},{4,5,6,7}};
我们通过取值运算符得到每个元素的地址(&a[i][j])
for(int i=0; i<3;i++)
{
for(int j=0;j<4;j++)
{
cout<<&a[i][j]<<' ';
}
cout<<endl;
}
因为整形是4个字节的,所以每个元素之间相差4个字节。
001CFB04 001CFB08 001CFB0C 001CFB10
001CFB14 001CFB18 001CFB1C 001CFB20
001CFB24 001CFB28 001CFB2C 001CFB30
如果我们用矩阵来表的话(把上面的&去掉)
1 2 3 4
2 3 4 5
4 5 6 7
这样是否会更加直观一点?
假设我们要取某个位置的值,可以有两种方法:
/* 我们要取第二行第三个数
因为数组是从0开始计数的
因此对应于(1,2)
*/
int value1 = a[1][2]; //用中括号
int value2 = *(*(a+1)+2); //用指针
所以,我们可以得到一个等价公式:
a[i][j] === *( * ( a + i ) + j )
对二维数组初始化:
int b[][5] = { {1,2,3,4,5},{2,3,4,5,6},...}; //可以不指定具体行数,但是必须指定列数
,虽然在内存中是线性排列的,但是我们可以想象成一个m行n列的二维矩阵。
假设我们声明并初始化了一个整形二维数组a[4][3]
int a[3][4] = {{1,2,3,4},{2,3,4,5},{4,5,6,7}};
我们通过取值运算符得到每个元素的地址(&a[i][j])
for(int i=0; i<3;i++)
{
for(int j=0;j<4;j++)
{
cout<<&a[i][j]<<' ';
}
cout<<endl;
}
因为整形是4个字节的,所以每个元素之间相差4个字节。
001CFB04 001CFB08 001CFB0C 001CFB10
001CFB14 001CFB18 001CFB1C 001CFB20
001CFB24 001CFB28 001CFB2C 001CFB30
如果我们用矩阵来表的话(把上面的&去掉)
1 2 3 4
2 3 4 5
4 5 6 7
这样是否会更加直观一点?
假设我们要取某个位置的值,可以有两种方法:
/* 我们要取第二行第三个数
因为数组是从0开始计数的
因此对应于(1,2)
*/
int value1 = a[1][2]; //用中括号
int value2 = *(*(a+1)+2); //用指针
所以,我们可以得到一个等价公式:
a[i][j] === *( * ( a + i ) + j )
对二维数组初始化:
int b[][5] = { {1,2,3,4,5},{2,3,4,5,6},...}; //可以不指定具体行数,但是必须指定列数
相关文章推荐
- 二维数组和二维指针的关系
- 二维指针和二维数组的关系
- C_C++_二维数组与二维指针的地址与访问关系
- 彻底搞清C/C++中一维数组,二维数组,指针,数组指针和指针数组以及指向指针的指针,行地址和列地址之间的关系
- 二维数组和二维指针
- C++二维数组和指针的关系
- C/C++中二维数组和指针关系分析
- 二维数组与二维指针总结
- 探究二维数组与指针的关系
- 关于二维数组与二维指针传递参数
- C 二维数组与指针的关系
- 彻底搞清C/C++中一维数组,二维数组,指针,数组指针和指针数组以及指向指针的指针,行地址和列地址之间的关系
- 二维指针和二维数组
- 关于二维数组和二维指针的相关问题
- C/C++中二维数组和指针关系分析
- c++高级---C/C++二维数组---与指针的关系
- 二维数组与指针的关系
- 二维指针与二维数组
- C/C++中二维数组和指针关系分析
- C/C++中二维数组和指针关系分析