0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用指针数组和数组指针来表示二维数组?

学益得智能硬件 来源:学益得智能硬件 2023-03-06 11:38 次阅读

如何用指针数组和数组指针来表示二维数组?

今天来给大家分享一道经典的笔试题。

1047cc5a-bbcc-11ed-bfe3-dac502259ad0.png  

a是一个二维数组,3 行 4 列,一共 12 个元素。

p是个数组,数组里面元素个数不详,每个元素都是整型指针。

那么它应该如何初始化?

首先,既然是数组,初始化一定需要一个大括号,然后里面填上多个整型指针。

int*p[]={};
那在二维数组中,能不能找到int *类型的数据?

肯定是有的。

在二维数组中,无非有这么几种写法:
a;
a[0];
a[0][0];
&a;
&a[0];
&a[0][0];
数组名肯定不对,它是一个二级地址;

&a更不对,它是三级地址;

a[0][0]是个具体的元素,跟地址没有关系。

10659668-bbcc-11ed-bfe3-dac502259ad0.png  

剩下的就是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包含三个指针,每个指针都指针二维数组每行的第一个元素。

10e5048e-bbcc-11ed-bfe3-dac502259ad0.png

再来看q。

1047cc5a-bbcc-11ed-bfe3-dac502259ad0.png  

q是个指针,指向数组,而且是个一维数组,因为只有一个中括号,但是数组有几个元素不详,每个元素都是整数。

那数组a中有没有一维数组数组呢?

当然有的,我们刚接触二维数组的时候,老师就跟我们说过,二维数组就是由多个一维数组组成,第一行是个一维数组,第二行也是一个一维数组。

11965702-bbcc-11ed-bfe3-dac502259ad0.png  

那我们只要把第一行的地址赋值给q就行。

于是可以把q初始化成:
int(*q)[] = a;
a表示数组第一行的地址,所以q后面的中括号也能顺理成章的写成4,因为一维数组有4个元素。
int (*q)[4] = a;
q的含义和a是一样的,表示数组第一行的地址,q加一,就指向数组的下一行。

11b71cc6-bbcc-11ed-bfe3-dac502259ad0.png  

这个就是C语言里面的指针数组和数组指针,怎么样,迷糊了没?




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136120

原文标题:分别用指针数组和数组指针表示二维数组

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言指针和数组的错误用法

    工作好几年了,一直用的都是C。自认为指针应该很熟悉了。然而,前段时间我对二维指针二维数组的一个混用,并且我们项目组的一个大牛(博士毕业,工
    发表于 09-28 09:12 672次阅读

    C语言中指针数组和数组指针的区别

    指针和数组之间存在着紧密的关系。在本文中,我们将探讨指针和数组的关系、指针算术和数组遍历、多维
    发表于 08-17 15:29 395次阅读

    指针数组数组指针的区别

    int (*p)[4];// 定义一个数组指针,指向含4个元素的一数组数组元素是int类型。int *p[4];// 定义一个
    发表于 07-15 21:41

    问一个二维数组指针的问题?

    比如定义一个二维数组int a[3][5], 我们知道a是这个二维数组的首地址,a[0]是第一行元素的首地址,假设这个二维
    发表于 05-09 11:28

    数组指针的详细讲解

    数组指针的详细讲解
    发表于 10-16 08:44 0次下载

    C语言入门教学之数组资料总结免费下载

    二维数组的定义和二维数组元素的引用6 二维数组指针
    发表于 10-23 17:53 5次下载
    C语言入门教学之<b class='flag-5'>数组</b>资料总结免费下载

    C语言程序设计教程之二维数组如何应用二维数组的资料概述

    本文档的主要内容详细介绍的是C语言程序设计教程之二维数组如何应用二维数组的资料概述主要内容包括了:1 了解二维
    发表于 10-26 16:48 3次下载

    二维数组指针指向错误应该如何纠正

    本文档的主要内容详细介绍的是二维数组指针指向错误应该如何纠正。
    发表于 12-13 16:01 12次下载
    <b class='flag-5'>二维</b><b class='flag-5'>数组</b>的<b class='flag-5'>指针</b>指向错误应该如何纠正

    指针数组和数组指针的区别

    这里我们区分两个重要的概念:指针数组数组指针
    的头像 发表于 06-29 15:30 2w次阅读
    <b class='flag-5'>指针</b><b class='flag-5'>数组</b><b class='flag-5'>和数组</b><b class='flag-5'>指针</b>的区别

    理解函数指针、函数指针数组、函数指针数组指针

    理解函数指针、函数指针数组、函数指针数组指针
    的头像 发表于 06-29 15:38 1.5w次阅读
    理解函数<b class='flag-5'>指针</b>、函数<b class='flag-5'>指针</b><b class='flag-5'>数组</b>、函数<b class='flag-5'>指针</b><b class='flag-5'>数组</b>的<b class='flag-5'>指针</b>

    C语言指针和数组的区别

    在C语言教程中我们使用通过数组名通过偏移和指针偏移都可以遍历数组,那么指针和数组到底有什么区别??
    的头像 发表于 07-18 16:29 1899次阅读

    二维数组数组指针以及指针数组

    二维数组数组指针以及指针数组
    的头像 发表于 08-16 09:02 2577次阅读

    数组何用下标表示指针

    比如题目中声明的这个,就是由4个5行3列的二维数组组成。把这些二维数组编个号,就是 0 1 2 3。
    的头像 发表于 11-14 10:38 697次阅读
    三<b class='flag-5'>维</b><b class='flag-5'>数组</b>如<b class='flag-5'>何用</b>下标<b class='flag-5'>表示</b><b class='flag-5'>指针</b>

    数组指针不能混用的情况

    数组指针不能混用的情况  数组指针是 C/C++ 中非常常见的特性和概念。然而,在某些情况下,数组
    的头像 发表于 12-07 13:46 568次阅读

    数组指针不相同吗?数组指针有哪些区别

    数组就是指针指针就是数组,这样的言论在评论区看到不下于10次。
    的头像 发表于 12-13 16:34 1301次阅读
    <b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>不相同吗?<b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>有哪些区别