关于二维数组a[i][j]

本文详细解析了C/C++中二维数组的存储方式及其访问机制,包括数组元素的地址、行首地址的概念,并通过实例展示了如何使用指针访问二维数组中的特定元素。

下午学习时遇到了二维数组的相关问题,写此博客记录一下,说不定以后还会用到。

 

对于二维数组来说:

int a[3][4] = { {   1,  4,   5,   8 }, 
             {   9, 19, 20, 18 }, 
     { 17, 20, 35, 23 } };    


一、a[0][0]为第一个元素,那么取地址后&a[0][0]为第一个元素的地址;

二、a[0]为第一行的首地址;

三、二维数组名a的值为首地址;

四、对a解引用后*a为a[0],为第一行的首地址;

故a,a[0],*a,&a[0][0]均相等,为首地址


延伸:

我们知道若 int a=0; int *p=&a; 则输出p得到的是地址,输出p+1得到的是之前的结果再加4,因为int 占4字节;对p加一实际上是在内存中加4字节。

对于二维数组a[3][4]来说:

a+0的值为第一行的首地址,a+1的值为第二行的首地址,a+2的值为第三行的首地址;

*(a+0)为a[0],为第一行的首地址;*(a+1)为a[1],为第二行的首地址;*(a+2)为a[2],为第三行的首地址;

也就是说a+i,*(a+i),a[i]三者的值是相等的(i=0,1,2,3......)

那么用*(*(a+i)+j)就可以找到第i+1行,第j+1列的值(因为i,j是从0开始的,行列是从一开始的)


举例:

int main()
{
int a[3][4] = { {  1,  3,   5,    7 }, 
                     {  9,  11, 13, 15 }, 
     { 17, 19, 21, 23 } };/* cout << a << " " <<*a<<" "<< a[0] << " " << &a[0][0];*/
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
cout << *(*(a + i) + j) << endl;
}

}

return 0;

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值