如何用指针数组和数组指针来表示二维数组?
今天来给大家分享一道经典的笔试题。
a是一个二维数组,3 行 4 列,一共 12 个元素。
p是个数组,数组里面元素个数不详,每个元素都是整型指针。
那么它应该如何初始化?
首先,既然是数组,初始化一定需要一个大括号,然后里面填上多个整型指针。
int*p[]={};那在二维数组中,能不能找到int *类型的数据?
肯定是有的。
在二维数组中,无非有这么几种写法:
a; a[0]; a[0][0]; &a; &a[0]; &a[0][0];数组名肯定不对,它是一个二级地址;
&a更不对,它是三级地址;
a[0][0]是个具体的元素,跟地址没有关系。
剩下的就是a[0]和&a[0][0]。
其实这两个的含义一样,都表示第一行第一个元素的地址,既然是元素的地址,那肯定就是int *类型。
于是p的初始化就可以写成:
int*p[] = {a[0], a[1], a[2]};分别是第一行、第二行、第三行首元素的地址。
而p后面的中括号也可以写上3,表示数组有3个元素。
int *p[3] = {a[0], a[1], a[2]};内存模型画出来就是这样的,数组p包含三个指针,每个指针都指针二维数组每行的第一个元素。
再来看q。
q是个指针,指向数组,而且是个一维数组,因为只有一个中括号,但是数组有几个元素不详,每个元素都是整数。
那数组a中有没有一维数组数组呢?
当然有的,我们刚接触二维数组的时候,老师就跟我们说过,二维数组就是由多个一维数组组成,第一行是个一维数组,第二行也是一个一维数组。
那我们只要把第一行的地址赋值给q就行。
于是可以把q初始化成:
int(*q)[] = a;a表示数组第一行的地址,所以q后面的中括号也能顺理成章的写成4,因为一维数组有4个元素。
int (*q)[4] = a;q的含义和a是一样的,表示数组第一行的地址,q加一,就指向数组的下一行。
这个就是C语言里面的指针数组和数组指针,怎么样,迷糊了没?
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
180文章
7597浏览量
136120
原文标题:分别用指针数组和数组指针表示二维数组
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
C语言指针和数组的错误用法
工作好几年了,一直用的都是C。自认为指针应该很熟悉了。然而,前段时间我对二维指针和二维数组的一个混用,并且我们项目组的一个大牛(博士毕业,工
发表于 09-28 09:12
•672次阅读
C语言程序设计教程之二维数组如何应用二维数组的资料概述
本文档的主要内容详细介绍的是C语言程序设计教程之二维数组如何应用二维数组的资料概述主要内容包括了:1 了解二维
发表于 10-26 16:48
•3次下载
评论