【PTA】指针错题

PTA指针-错题

 数组a总共12个元素,

for循环为p[0] = &a[0]; 

               p[1] = &a[3];  

               p[2] = &a[6];  

               p[3] = &a[9];

这相当于把a分成了一个四行三列的二维数组,第一行的行地址为&a[0],元素有1,2,3。第二行的行地址为&a[3],元素有4,5,6...以此类推,p[3][2]就相当于问第四行第三列的元素是什么,显然是12.

 

PTA指针-错题02

基础知识没掌握好,做的时候还想着a的长度不是3吗,这6个元素肯定越界了啊!

其实数组a就相当于a[3]={ {5,&a[1]},{7,&a[2]},{9,NULL} };

*p=&a,相当于*p=&a[0],所以一开始指针p指向数组第一个元素。

a中一共三个节点,第一个节点是a[0],它的值为5,指针为&a[1],指向数组中的第二个元素a[1],即{7,&a[2]},它指向第三个节点a[2],值为9,指针空,所以a[2]在最后。

这样就知道第二个节点的值是7了。

A.p->next指向a[1],所以p->next->n就是a[1]的值,7.

B. ->的优先级大于++,所以相当于++(p->n),这个输出等于6.

C. 这个输出是5,p此时指向数组的第一个元素。

D. p->n为5,(p->n)++的值就是6.

正确答案是A

 

R4-2指针-错题03

【正确答案】第一个空:**q

                     第二个空:q = &language[k]; 或者 q = language+k;

首先看到题要清楚,language是指针数组,里面的5个元素都是指针变量,他们的值是字符型数据的地址,他们分别指向{"BASIC", "FORTRAN", "PROLOG", "JAVA", "C++"}这五个字符串。

从倒数第二句printf("%s",*q);可以知道q一定也是一个指针变量,指向某个变量。

不难看出printf("%s\n", language[k]);这一句可以达到相同的效果,这就相当于*q==language[k],即*q中存储的是一个地址,即*q指向一个指针变量,那*q就是一个指针了。

一个指向指针的指针肯定就是二级指针了!所以应该这么定义:char **q;

不懂的话也可以结合一级指针再仔细想想,比如说,

int *i;  int num;    i=#   

此时i中存储的是num的地址,i是一个指针,那么定义的时候i前面肯定有一个*。二级指针同理。

ps.我已经尽力解释的清楚一点了,要是哪里有错误请各位大佬轻喷^_^

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值