C语言指针典型题(2)

C语言指针典型题(2)

题目六

#include <stdio.h>
int main()
{
 char *a[] = {"work","at","alibaba"};
 char**pa = a;
 pa++;
 printf("%s\n", *pa);
 return 0;
}

解析

这是一个字符指针数组,数组的每个元素的是字符指针,所以a就是第一个字符指针的地址,想要存储指针的地址,就需要使用二级指针。
pa++,就是第二个指针的地址
解引用出来就是第二个元素,之后联系字符指针的特殊用法,就可以解引用出来就是"at"这个字符串。

答案

at

题目七

#include <stdio.h>
int main()
{
 char *c[] = {"ENTER","NEW","POINT","FIRST"};
 char**cp[] = {c+3,c+2,c+1,c};
 char***cpp = cp;
 printf("%s\n", **++cpp);
 printf("%s\n", *--*++cpp+3);
 printf("%s\n", *cpp[-2]+3);
 printf("%s\n", cpp[-1][-1]+1);
 return 0;
}

解析

这个题很难!
1.cpp存储的是(c + 3)的地址,所以++后,是(c + 2)的地址,两次解引用,就是c[2],也就是point。
2.cpp此时是(c + 2)的地址,再++后是(c + 1)的地址,解引用一次变成(c + 1),再–,也就变成了c,*c等于指向第一个字符串首字符的指针,所以加3变成ER
3.cpp[-2] = c + 3,之后就是指向FIRST字符串首字母的指针,最后ST
4.cpp[-1][-1] + 1就是指向NEW字符串首字母的指针,最后是EW

答案

POINT
ER
ST
EW

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值