c语言的基础问题,求解不会 50

求126和127的答案解析,(*p)[4]=a看不懂... 求126和127的答案解析,(*p)[4]=a看不懂 展开
 我来答
认真答却总被删BAIDU我凭什么同情你
2023-05-01 · TA获得超过442个赞
知道小有建树答主
回答量:1800
采纳率:79%
帮助的人:93.8万
展开全部
126题目给出了数组a的定义:int a[5][4],以及一个指针表达式:(*p)[4]=a。从这个表达式可以得出,p是一个指向包含4个整数的数组的指针,等于数组a的首地址。因此,我们可以得出 p = &a[0]。
我们知道数组a的首地址为100。整数在内存中占2个字节,所以每个数组元素占用2个字节。因此,int a[5][4]数组占用的内存空间为5 * 4 * 2 = 40字节。
现在我们来分析表达式*(p+2)+3。p+2表示指针p向后移动2个数组元素的位置,即指向a[2][0]。我们知道p指向的地址是100,所以 p+2 的地址是 100 + 2 * (4 * 2) = 116。所以 *(p+2) 就是从地址116开始的数组元素,即a[2][0]。
最后,*(p+2)+3 表示从a[2][0]开始,向后移动3个整数。由于每个整数占2个字节,所以这个表达式的地址是 116 + 3 * 2 = 122。这个地址对应于数组a的元素a[2][3]。所以答案是(D)122。

根据127题目中的信息,我们可以得出以下分析:
给定数组 a 的定义:int a[5][4],以及指针表达式:(*p)[4]=a。这个表达式意味着 p 是指向包含 4 个整数的数组的指针,等于数组 a 的首地址。因此,我们可以得出 p = &a[0]。
现在我们来分析表达式 *(*(p+2)+3)。
首先计算 (p+2),这表示指针 p 向后移动 2 个数组元素的位置,即指向 a[2][0]。所以 *(p+2) 就是从地址 a[2][0] 开始的数组元素。
然后我们计算 *(p+2)+3,这表示从 a[2][0] 开始,向后移动 3 个整数。所以,这个表达式对应于数组 a 的元素 a[2][3]。
最后,*(*(p+2)+3) 表示的是从地址 a[2][3] 处取出的整数值。这就是数组 a 中位置 [2][3] 的整数值。
所以答案是(D)a[2][3]。
shine1991
科技发烧友

2022-12-16 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部

根据运算符优先级/结合性,从内往外剥离

定义了变量p,

(*p),说明p的本质是一个指针

再外层的[4],说明指针指向的是一个有4个元素的数组

再往外一层,int,说明数组的元素类型是int

所以是顶一个一个数组指针p,并初始化为数组a的首地址

所以*(p+2)+3,即p[2]+3

又知道数组a的首地址为100,sizeof(int)=2,所以100+2*4*2+3*2=122

同理,下一题*(*(p+2)+3),即p[2][3],即a[2][3]

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CodeBlove
2023-03-28 · TA获得超过3363个赞
知道小有建树答主
回答量:936
采纳率:79%
帮助的人:239万
展开全部
(*p)[n] 这种形式叫作数组指针,结合基础类型,用于定义指向某种基础类型的二维数组指针变量。

比如 int (*p)[4] ;
表示p是一个指向int类型的列宽为4的二维数组的指针,p可以赋值int [m][4]类型的数组地址,比如 :
int a[10][4];
p=a;
此时p每加1,其存储的地址值递增 sizeof(int)*4=2*4=8字节宽度,即一行,因此数组指针又称行指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式