二维数组、指针数组、数组指针

来源:互联网 发布:怎么关闭软件网络禁用 编辑:程序博客网 时间:2024/06/05 19:29
int main()
{
int (*p)[4] ;
int *q;
int a[3][4] ={3,5,6,7,1,2,3,4,0,10,12,15};

/************************************************************************/
//a[0] , a[1] , a[2] 分别表示第1行,第2行,第3行的首地址
cout<< a[0] << "\t"<< a[1] <<"\t"<< a[2] <<endl;
cout<<endl;
/************************************************************************/
//和上面的输出相同,验证了,二维数组名可理解为行指针;
cout<<  &a[0][0] << "\t"<< &a[1][0] <<"\t"<< &a[2][0] <<endl;
cout<<endl;
/************************************************************************/
//(a+0) , (a+1) , (a+2) 分别表示第1行,第2行,第3行的首地址
cout<<  (a+0) << "\t"<< (a+1) <<"\t"<< (a+2) <<endl;
cout<<endl;
/************************************************************************/
//*(a+0) , *(a+1) , *(a+2) 分别表示第 1 行第 1 个元素地址,第 2 行第 2 个元素地址,第 3 行第 3 元素地址;
cout<<  *(a+0) << "\t"<< *(a+1) <<"\t"<< *(a+2) <<endl;
cout<<endl;
/************************************************************************/
// a 是二维数组行指针, *a 是取第 1 行 第 1 个元素地址,
// *a+0 是第 1 行第 1 个元素地址 + 偏移 0 ;
// *a+1 是第 1 行第 1 个元素地址 + 偏移 1;
cout<<  *a+0 << "\t"<<  *a+1 <<"\t"<< *a+2 <<"\t"<< *a+3  <<endl;
cout<<endl;
/************************************************************************/
//同下面的描述. *(*a+0)  和 *(*(a+0)+0) 等价
cout<< *(*a+0) << "\t"<<  *(*a+1) <<"\t"<< *(*a+2) <<"\t"<< *(*a+3)  <<endl;
cout<<endl;
//*(a+0)+0 ==> 第 1 行第 1 个元素地址 + 偏移 0 ; *(*(a+0)+0) ==> 解引用,取出值为3
//*(a+0)+1 ==> 第 1 行第 1 个元素地址 + 偏移 1 ; *(*(a+0)+1) ==> 解引用,取出值为5
cout<< *(*(a+0)+0) <<"\t"<< *(*(a+0)+1) <<"\t"<< *(*(a+0)+2) <<"\t"<< *(*(a+0)+3)  <<endl;
cout<<endl;

//这里其实是把二维数组中 a 的第 1 行第 1 个元素的地址赋值给q;
q = *a;
//取 q(*a) 、q+1(*a+1) 、 q+2(*a+2) 、q+3(*a+3)
cout<< q <<"\t"<< q+1 <<"\t"<< q+2<<"\t"<< q+3 << endl;
//取值;
cout<< *q <<"\t"<< *(q+1) <<"\t"<< *(q+2)<<"\t"<< *(q+3) <<"\t"<<*(q+4)<< endl;

//p是一个数组指针,这个指针指向包含4个int型的数组。
//这里是将数组 a 的第一行首地址(包含4个元素) 赋值给p;
p = a;
//p+1相当于 a+1,既偏移到第 2 行;
cout<< p <<"\t"<< p+1 <<"\t"<< p+2 << endl;

//指针数组: 数组中的每个元素都是一个相应类型的指针变量;
//在定义指针数组时,系统会分配响应的空间来存放这些指针变量;
//因 m 已经分配好地址,所以其不可变;
//m[0] 是指针数组中的第一个元素,存放了一个指向int型变量的指针;
int* m[3];
m[0] = *a;
cout<<m[0][0]<<"\t"<<m[0][1]<<"\t"<<m[0][2]<<"\t"<<m[0][3]<<endl;

m[1] = *(a+1);
cout<<m[1][0]<<"\t"<<m[1][1]<<"\t"<<m[1][2]<<"\t"<<m[1][3]<<endl;
getchar();
}

 

0 0
原创粉丝点击