指针数组习题补充|热消息

2023-06-14 20:51:30 来源:哔哩哔哩

因为最近挺忙的一直没找到机会配音(主要是我懒),(而且我本人也不是特别善于言辞,用文字也会更严谨避免口误)所以一些想讲的习题发专栏了。


【资料图】

这种题就记住我经常讲的a[i]=*(a+i)和&a[i]=a+i

pp是二重指针,可以指向一个指针变量(赋值为一个指针变量的地址),p是指针数组,相当于开了3个指针变量p[0],p[1],p[2],整形数的指针变量可以指向一个整形数(赋值为整形数的地址),也可以赋值为一个一维整形数组中任何一个元素的地址。

同理二重指针可以 赋值为一个指针变量的地址,也可以赋值为一个指针数组的初地址。

在这个程序执行完毕后p[0]=&a[0],p[1]=&a[4],p[2]=&a[8]。

选项A,pp[0][1]即*((*pp)+1),因为pp=p,所以*pp=*p=p[0],*((*pp)+1)=*(p[0]+1)。因为p[0]=&a[0]=a,所以*(p[0]+1)=*(a+1)=a[1],正确。

选项B,a[10],a的长度是12,所以合法的调用是a[0~11],正确。

选项C,p[3][1],由于p的长度为3,合法的调用是p[0~2],数组越界,选项错误,答案为C。

选项D,等于*(p[2]+2)=*(&a[8]+2)=*(a+8+2)=a[10],正确。

如何快速的做出这种题呢,其实就是对代码进行分析,知道这个程序要做什么,不用特别在意其执行的过程。

fun函数就是 给定 字符型指针数组*s[],整形数n。通过二重for循环(看i和j的范围,再看下面的比大小,DNA动了吗,这是冒泡排序啊,什么?你不知道?给我好好记住!)排序,接下来我们就要搞清楚最后结果是升序(从小到大)还是降序(从大到小),看里面的if语句,我们知道i一定小于j,如果前面的长度大于后面,则对它俩进行交换。可以这样想,如果前面大于后面,我们认为这不合理,那么最后的结果一定是小的全在前面,大的全在后面,所以这是一个升序排序(别背不等号的方向,一换位置你就懵逼了)。

于是我们在主函数输出的s[0]和s[4]分别是最短和最长的字符串,输出结果是xy,aaaacc

推荐阅读>