C语言之多维数组

1、概念
所谓的“多维”,在内存的表现形式上,还是一维的。比如常见的二维数组,int tab[2][3];在内存上是按tab[0][0]、tab[0][1]、tab[0][2]、tab[1][0]、tab[1][1]、tab[1][2]连续存储的一维数组。即按照列先变化、且从0开始增大的顺序依次存储。
2、数组名
对于一维数组来说,数组名代表该数组首元素的地址,其指向数组的首元素。而多维数组是特殊的一维数组,对于int tab[2][3]而言,数组名tab指向了二维数组tab的第一维,即二维数组的首元素(该处的元素比较特殊,又是一个含有3个元素的一维数组)。实际上tab也可看作是一个含有2个元素的一维数组,而每个一维数组中包含3个元素。
3、数组指针
如2所说,tab指向了二维数组tab中的首行元素(为一个含有3个元素的一维数组),即tab为一个指向数组的指针,我们把指向数组的指针称之为数组指针,一般定义形如int (*ptr)[3];从形式上看,括号内的ptr前面有一个星号,说明ptr为一指针,接着ptr右边是一个中括号,表示该指针指向的是一个含有3个int类型元素的数组。
4、数组指针解引用和加减操作
对于一个int类型的指针进行解引用可以得到一个int类型的元素,那么对于一个指向数组的数组指针进行解引用则可以得到一个数组。则可以对其进行下标引用操作,得到其元素。例如对如下数组进行输出:

int  tab[2][3]={
	{1,2,3},
	{4,5,6}
};
printf("%d\n",tab);//得到数组指针tab的内容,即首行元素的地址
printf("%d\n",*tab);//对tab进行解引用,得到一个数组名,也为首地址,可以继续进行数组的下标引用操作或者对其继续进行解引用,得到首元素1
printf("%d\n",*tab+1);//得到指向第一行第二个元素2的指针
printf("%d\n",*(*tab+1));//得到元素2
printf("%d\n",(*tab)[2]);//对第一行的数组的第三个元素进行输出,得到元素3
printf("%d\n",**tab);//得到首元素1

printf("%d\n",tab+1);//tab+1还是一个数组指针,指向二维数组的第二行
printf("%d\n",*(tab+1));//得到指向第二行首元素的指针,继续解引用可以得到元素4
printf("%d\n",*(*(tab+1)+2));//对指向第二行第三列元素的指针进行解引用,得到元素6
return 0

5、总结
对于多维数组的解引用以及加减操作,最关键的是要搞清楚二维数组的数组名是一个数组指针,指向二维数组的首行元素,即指向一个数组,然后对数组指针解引用的结果可以得到一个一维数组或者说得到的结果指向首行数组的首个元素,对其进行继续解引用,可以得到首个元素;

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值