您的位置:首页 > 其它

二维数组和二维指针的关系

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},...}; //可以不指定具体行数,但是必须指定列数

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息