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

求126和127的答案解析,(*p)[4]=a看不懂

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]。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-16

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

定义了变量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]

第2个回答  2023-03-28
(*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字节宽度,即一行,因此数组指针又称行指针。
相似回答