二维数组的指针,某一行的指针,某一元素的指针各代表什么含义? 5

 我来答
CodeBlove
2020-01-08 · TA获得超过3364个赞
知道小有建树答主
回答量:936
采纳率:79%
帮助的人:244万
展开全部

int a[5][6];

int (*p)[6]=a;

int * p1= a[0];

int * p2= &a[0][0];

首先,数组首地址值=行首地址值=第一个元素地址值,注意只是值相等,重要的是类型不同.记住:地址类型很重要.

1)int (*)[n]

数组地址类型,其中n为列宽,表示一行中包含n个int元素,此处为6,即6个int元素组成一行,并将其看成一个整体,int的数据宽度是4字节,因此一行(整体)有4*6=24个字节.此类指针每次递增1即递增24个字节

指针值都是4字节的,区分不同类型的目的就是为了指示:指针指向的内存的数据宽度,即该指针指向的地址开始存放的数据是多少字节的,进而实现数据对齐.

a是个数组,"a"这个标识符映射为常量指针,其类型为 int (*)[6],指向数组首地址,因此可以直接赋值给p.

注意p的数据宽度也是4*6=24,如果p++,那么递增的是24个字节.所以这种类型的指针也称为行指针,因为以行为基本单位.

    因此,二维数组指针就是行指针.

2)int *

单个int类型元素的指针,也可以作为一维数组的指针,同样原因:数据宽度一致,都是4字节.

因此a[0]表示数组首行,而行数据是个int型的一维数组,因此其类型为 int *,所以可以直接赋值.

同样 a[0][0]表示数组首行首元素,因此取地址后也可以直接赋值给int *类型指针.


最后再次重申,解读指针定义或者分析右值类型时,数据宽度是关键所在.

附图显示数组首地址值=行首地址值=第一个元素地址值,但是类型是不同的.

cdyzxy
2019-11-27 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3734万
展开全部

举例说明:

int a[3][4];

&a[0][0]的类型是int *

&a[0]的类型是指向一个4个元素的一维int类型数组

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小菜鸟2无聊写代码
2019-11-27 · TA获得超过1058个赞
知道小有建树答主
回答量:932
采纳率:87%
帮助的人:167万
展开全部
以二维数组 int a[2][2];为例
既知表达式 a 的值即&a[0]或者是a+0的值
类型是int**
a[0]的值即&a[0][0]
某一个行的指针,以a[0],即第一行的指针为例,其含义是a[0][0]的地址值
某 一元素 的地址的表达式,&a[0][0], 为第一行第一个元素的地址,&a[1][1]是第二行第二个元素的地址
某一行(以第x行为例)元素的指针是该行第一个元素的地址值,表达式是&a[x-1][0]或者a[x-1]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式