二维数组元素的地址(C语言规则,VC++验证)

­

#include <iostream.h>


void main()
{
 int a[2][3] = {{10, 20, 30}, {11, 21, 31}};
    cout<<"a= "<<a<<" 第0行首地址"<<endl;//
 cout<<"&a[0]= "<<&a[0]<<" 0行0列首地址"<<endl<<endl;//
 
 cout<<"*a= "<<*a<<" 0行0列元素地址"<<endl;//   
 cout<<"a[0]= "<<a[0]<<" 0行0列元素地址"<<endl;// 
 cout<<"(a+0)= "<<a+0<<" 0行0列元素地址"<<endl;//
 cout<<"*(a+0)= "<<*(a+0)<<" 0行0列元素地址"<<endl;//
    cout<<"&a[0][0]= "<<&a[0][0]<<" 0行0列元素地址"<<endl<<endl;//
 
   

 cout<<"*a[0]= "<<*a[0]<<" 第0行0列元素"<<endl;//,正确格式,但是对于其他元素不能这么写
 cout<<"**a= "<<**a<<" 第0行0列元素"<<endl;//
 cout<<"**(a+0)= "<<**(a+0)<<" 第0行0列元素"<<endl<<endl;//


 cout<<"a= "<<a<<"  a[0]= "<<a[0]<<"  a[1]= "<<a[1]<<"  a[2]= "<<a[2]<<endl;
 cout<<"&a= "<<&a<<"  &a[0]= "<<&a[0]<<"  &a[1]= "<<&a[1]<<"  &a[2]= "<<&a[2]<<endl;
 cout<<"0行首地址*a= "<<*a<<"0行0列元素*a[0]= "<<*a[0]<<"1行0列元素*a[1]= "<<*a[1]<<"超范围值不定*a[2]= "<<*a[2]<<endl<<endl; 

上行为各行首元素,其他列元素不能这么表示,见下例

cout<<"a+0= "<<a+0<<"  a+1= "<<a+1<<"  a+2= "<<a+2<<endl;//各行首地址
 cout<<"*(a+0)= "<<*(a+0)<<"  *(a+1)= "<<*(a+1)<<"  *(a+2)= "<<*(a+2)<<endl<<endl;;//各行首地址

 

 cout<<"a[0][0]= "<<a[0][0]<<"  a[0][1]= "<<a[0][1]<<"  a[0][2]= "<<a[0][2]<<endl;//元素值
 cout<<"a[1][0]= "<<a[1][0]<<"  a[1][1]= "<<a[1][1]<<"  a[1][2]= "<<a[1][2]<<endl;
 cout<<"&a[0][0]= "<<&a[0][0]<<"  &a[0][1]= "<<&a[0][1]<<"  &a[0][2]= "<<&a[0][2]<<endl;//元素地址
 cout<<"&a[1][0]= "<<&a[1][0]<<"  &a[1][1]= "<<&a[1][1]<<"  &a[1][2]= "<<&a[1][2]<<endl<<endl;
// cout<<"*a[0][0]= "<<*a[0][0]<<"  *a[0][1]= "<<*a[0][1]<<"  *a[0][2]= "<<*a[0][2]<<endl;错误格式
// cout<<"*a[1][0]= "<<*a[1][0]<<"  *a[1][1]= "<<*a[1][1]<<"  *a[1][2]= "<<*a[1][2]<<endl;错误格式
 cout<<"*(a+0)+0= "<<*(a+0)+0<<"  *(a+0)+1= "<<*(a+0)+1<<"  *(a+0)+2= "<<*(a+0)+2<<endl;//0行各列地址
 cout<<"*(*(a+0)+0)= "<<*(*(a+0)+0)<<"  *(*(a+0)+1)= "<<*(*(a+0)+1)<<"  *(*(a+0)+2)= "<<*(*(a+0)+2)<<endl;//0行各列元素值
 

cout<<"*(a+1)+0= "<<*(a+1)+0<<"  *(a+1)+1= "<<*(a+1)+1<<"  *(a+1)+2= "<<*(a+1)+2<<endl;
 cout<<"*(*(a+1)+0)= "<<*(*(a+1)+0)<<"  *(*(a+1)+1)= "<<*(*(a+1)+1)<<"  *(*(a+1)+2)= "<<*(*(a+1)+2)<<endl<<endl;

 

 cout<<"a[0]+0= "<<a[0]+0<<"  a[0]+1= "<<a[0]+1<<"  a[0]+2= "<<a[0]+2<<endl;//0行各列元素地址
 

cout<<"a[1]+0= "<<a[1]+0<<"  a[1]+1= "<<a[1]+1<<"  a[1]+2= "<<a[1]+2<<endl; 
 cout<<"*(a[0]+0)= "<<*(a[0]+0)<<"  *(a[0]+1)= "<<*(a[0]+1)<<"  *(a[0]+2)= "<<*(a[0]+2)<<endl;//0行各列元素值
 cout<<"*(a[1]+0)= "<<*(a[1]+0)<<"  *(a[1]+1)= "<<*(a[1]+1)<<"  *(a[1]+2)= "<<*(a[1]+2)<<endl<<endl;
}

 

 

 

小结:

1.各行元素首地址:    a+i ,   *(a+i),    a[i]   ,   &a[i] 

2.各行各列元素地址:*(a+i)+j,  a[i]+j,  &a[i][j]

3.各行各列元素值:*(*(a+i)+j) ,*(a[i]+j), a[i][j]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值