博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一道笔试指针题目详解
阅读量:7076 次
发布时间:2019-06-28

本文共 1421 字,大约阅读时间需要 4 分钟。

看到本题是在搜狗某年的笔试题上,看也没人给出非常详细的讲解,直接给出了答案,我来尝试写一写,错误之处园友们指教.

貌似本题来源自<The C Puzzle Book> ,搜狗也只是换了一下字符串,直接看题吧

#include 
char *c[]={
"ENTNG", "NST","AMAZI","FIRBE"};char** cp[]={c+3, c+2, c+1, c};char ***cpp= cp;int main() { printf("%s",**++cpp); printf("%s ",*--*++cpp+3); printf("%s",*cpp[-2]+3); printf("%s",cpp[-1][-1]+1);}

 

请写出程序的执行结果....

首先从左到右看:

char *c[]= {              "ENTNG",               "NST",              "AMAZI",              "FIRBE"            };

 

*c[] 是一个字符,因此,c[]是指向该字符,c就是一个数组(数组的内容为指向字符的指针),c已经被初始化了.

char** cp[]={c+3, c+2, c+1, c};

 

再看第二行,**cp[]是一个字符,*cp[]就是一个指针,指向该字符,cp[]就是一个指针,指向该指针,而cp就成为了指针数组,内容是指向字符的指针的指针。并且通过c的元素进行了初始化

char ***cpp= cp;

 

第三行,***cpp是一个字符,**cpp指向该字符,*cpp指向该指针,cpp就指向该字符的指针的指针.

然后我画一张图表示初始的情况看看

然后对于下面的输出语句,通过操作符优先级使用括号来区分一下:

*(*(++cpp));

 

这个嘛,就是把cpp后移(注意cpp已经改变了)然后就指向了cp[1],然后两次取其值即可得到AMAZI

推导过程如下:

++cpp -> cp[1]       // cp[1] -> c+2++cpp = &cp[1]       // &(c+2)*++cpp = *(&c+2)     //  c[2]**++cpp = *&c[2]

 

然后看第二个

(*(--(*(++cpp))))+3;

 

加括号后如上,cpp再加一,就指向了cp[2],取一次值(也就是*号)就变成了c[1],然后--c[1]就指向了c[0],取值就成了c[0]的地址,然后地址+3,就是NG了

(*(cpp[-2]))+3;

 

上面,cpp指向cp[2]了,然后呢,cpp[-2] 相当于*(cpp-2),间接引用cp[2],这样cpp[-2]就指向了cp[0]了,然后,就是FIRBE了,加3就是BE了

最后

(cpp[-1][-1])+1;

cpp还是之前的cp[2],cpp[-1][-1]相当于*(*(cpp-1)-1),先减1指向了cp[1],取一次值就是c[2]了,然后c[2]-1就成为c[1]了,然后+1之后就是ST了.

所以,最后输出就是

AMAZING BEST

错误之处还望指正.

 我的博客:

 

转载于:https://www.cnblogs.com/lazycoding/archive/2013/04/17/3025453.html

你可能感兴趣的文章
php系统常量
查看>>
JS前台加密,java后台解密实现
查看>>
iOS开发CoreData的多表关联
查看>>
重读金典------高质量C编程指南(林锐)-------第六章 函数设计
查看>>
MySQL用命令行复制表,查看表结构
查看>>
第三次冲刺
查看>>
PHP多进程
查看>>
微软职位内部推荐-SENIOR SOFTWARE ENGINEER
查看>>
数值优化(三)
查看>>
Javascript.ReactNative-2-javascript-syntax-in-react-native
查看>>
LeetCode:Balanced Binary Tree
查看>>
4.时间复杂度和空间复杂度-2
查看>>
华为架构师8年经验谈:从单体架构到微服务的服务化演进之路
查看>>
软件工程——团队答辩
查看>>
Eonasdan bootstrap datetimepicker 使用记录
查看>>
使用 JavaScript 将网站后台的数据变化实时更新到前端-【知乎总结】
查看>>
四: 基本标签
查看>>
图片文件重命名
查看>>
Day1 BFS算法的学习和训练
查看>>
A Tour of Go Methods continued
查看>>