h-b-z-d-j-s-m 发表于 2023-3-22 13:07:39

字符指针,指针字符

若有定义:int t,*pt,k;则执行语句for(k=0;k<3;k++),pt=t;后,以下选项中能正确表示t数组元素地址的表达式是()
A.&t
B.*pt
C.*(pt+1)
D.&pt


有人能解释下数组指针跟指针数组的区别吗,我的理解是数组指针就是一行存放,指针数组是竖着存放,不太能理解为什么(*p)时,*(p+1)就是地址,分不清什么时候是值,什么时候是地址


isdkz 发表于 2023-3-22 13:19:34

在执行语句for(k=0;k<3;k++),pt=t;之后,pt数组中存储了int类型的指针,每个指针指向t数组的每一行。因此,可以使用指针数组中的指针来访问t数组的元素。

根据上述定义,选项B.*pt可以正确表示t数组的第三行第一个元素的值,因为pt指向t数组的第三行,*pt解引用这个指针,访问这一行的第一个元素。

选项A.&t是错误的,因为t数组的最后一行和最后一列的下标都是2,因此t超出了t数组的边界。

选项C.*(pt+1)是错误的,因为(pt+1)指向t数组的第二行,而不是元素的地址。

选项D.&pt是错误的,因为pt是一个指针数组,&pt表示指向pt数组的第三个指针的指针,而不是t数组元素的地址。

关于数组指针和指针数组的区别:数组指针是指向数组的指针,可以用来访问数组中的元素,而指针数组是一个数组,其中的每个元素都是指针。因此,数组指针和指针数组的本质区别在于它们所指向的对象是不同的。

对于(*p)这样的声明,p是一个指向含有4个int类型元素的数组的指针。因此,*p是一个含有4个int类型元素的数组,*(p+1)指向p所指向的数组的下一个数组,即地址为p+sizeof(int) * 4。在这种情况下,*操作符用于解引用指向数组的指针,而+操作符用于计算指针的偏移量。

remake111 发表于 2023-4-20 12:11:42

isdkz 发表于 2023-3-22 13:19
在执行语句for(k=0;k

但是题目是要求表示数组元素的地址,C项是表示二维数组的第二行首地址,而第二行元素的首地址不就是第二行第一个元素的地址吗?

remake111 发表于 2023-4-20 12:13:34

B是取得数组元素吧
页: [1]
查看完整版本: 字符指针,指针字符