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


对于一个二维数组a[m][n],虽然在内存中是线性排列的,但是我们可以想象成一个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},...}; //可以不指定具体行数,但是必须指定列数



    


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值