⼆维数组的⼏种表⽰⽅法
/*
名称:⼆维数组的⼏种表⽰⽅法
说明:常⽤的有以下⼏种⼆维数组的表⽰⽅法:
(1)、第⼀种是普通的⼆维数组的表⽰⽅法。
(2)、第⼆种是⽤⼀维数组来表⽰⼆维数组,从显⽰的元素地址可以看出,⼆维数组和⼀维数组表⽰的⼆维数组在内存中的储存⽅式其实是⼀样的,不过使⽤⼆维数组看起来要简单些,只要不⽤进⾏地址转换。
(3)、第三种表⽰是⽤指针数组。本例中的c[i]中的元素其实是地址。这种⽅法对各个元素⼤⼩不⼀样的情况下⽐较适⽤。如:假定有若⼲个不等长字符串需要我们处理,如果使⽤a [i ][j]结构,则j必须取这些字符串长度的最⼤值, 显然这种⽅法浪费空间。如果采⽤* a [i ]结构,则由于a中仅保存每个字符串的⾸地址,⽽不是串本⾝,这不仅节约了空间,⽽且减少了直接对串进⾏操作的时间。
(4)、第四种⽅式为⽤指向指针的变量来表⽰。此种⽅式p是指向指针的指针,不能把普通的⼆维数组的
⾸地址(如本例中的a)赋给它。(因为a不是指向指针的指针)。可以把第三种⽅式中的数组指针的⾸地址赋给它。这种⽅式⽤的较少。
*/
#include<iostream>
using namespace std;
int main()
{
int a[3][3] = {{0,1,2},{3,4,5},{6,7,8}};
int b[9] = {0,1,2,3,4,5,6,7,8};
int *c[3];
int **p;
cout<<"普通⼆维数组表⽰"<<endl;
for(int i = 0;i<3;++i)
{
指针与二维数组for(int j = 0;j<3;++j)
{
cout<<a[i][j]<<"("<<&a[i][j]<<")"<<" "; //括号⾥是对应元素的地址//cout<<*(*(a+i)+j)<<" ";
}
cout<<endl;
}
cout<<"普通⼀维数组表⽰"<<endl;
for(int i = 0;i<3;++i)
{
for(int j = 0;j<3;++j)
{
cout<<b[i*3+j]<<"("<<&b[i*3+j]<<")"<<" ";
}
cout<<endl;
}
cout<<"指针数组表⽰:"<<endl;
for(int i = 0;i<3;++i)
{
c[i] = *(a+i); //c[i]指向a数组的第i⾏⾸地址
for(int j = 0;j<3;++j)
{
cout<<c[i][j]<<"("<<&c[i][j]<<")"<<" ";
}
cout<<endl;
}
cout<<"指针变量表⽰"<<endl;
p = c; //p为指向指针的指针,将指针数组c赋给指针变量p
for(int i = 0;i<3;++i)
{
for(int j = 0;j<3;++j)
{
cout<<p[i][j]<<"("<<&p[i][j]<<")"<<" ";
}
cout<<endl;
}
return0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论