一道笔试指针题目详解
2013-04-17 09:59
218 查看
看到本题是在搜狗某年的笔试题上,看也没人给出非常详细的讲解,直接给出了答案,我来尝试写一写,错误之处园友们指教.
貌似本题来源自<The C Puzzle Book> ,搜狗也只是换了一下字符串,直接看题吧
首先从左到右看:
*c[] 是一个字符,因此,c[]是指向该字符,c就是一个数组(数组的内容为指向字符的指针),c已经被初始化了.
再看第二行,**cp[]是一个字符,*cp[]就是一个指针,指向该字符,cp[]就是一个指针,指向该指针,而cp就成为了指针数组,内容是指向字符的指针的指针。并且通过c的元素进行了初始化
第三行,***cpp是一个字符,**cpp指向该字符,*cpp指向该指针,cpp就指向该字符的指针的指针.
然后我画一张图表示初始的情况看看
然后对于下面的输出语句,通过操作符优先级使用括号来区分一下:
这个嘛,就是把cpp后移(注意cpp已经改变了)然后就指向了cp[1],然后两次取其值即可得到AMAZI
推导过程如下:
然后看第二个
加括号后如上,cpp再加一,就指向了cp[2],取一次值(也就是*号)就变成了c[1],然后--c[1]就指向了c[0],取值就成了c[0]的地址,然后地址+3,就是NG了
上面,cpp指向cp[2]了,然后呢,cpp[-2] 相当于(*cpp)-2,间接引用cp[2],这样cpp[-2]就指向了cp[0]了,然后,就是FIRBE了,加3就是BE了
最后
cpp还是之前的cp[2],cpp[-1][-1]相当于(*(*cpp)-1)-1),先减1指向了cp[1],取一次值就是c[2]了,然后c[2]-1就成为c[1]了,然后+1之后就是ST了.
所以,最后输出就是
AMAZINGBEST
错误之处还望指正.
我的博客:http://leaver.me
貌似本题来源自<The C Puzzle Book> ,搜狗也只是换了一下字符串,直接看题吧
#include <stdio.h> 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了.
所以,最后输出就是
AMAZINGBEST
错误之处还望指正.
我的博客:http://leaver.me
相关文章推荐
- 一道笔试指针题目详解
- 一道关于二维数组和指针数组的C语言笔试题目
- 百度一道笔试题目的答案
- 指针、数组相关笔试题详解
- 矩阵相乘 指针指针 网上看到的一道题目
- 一道C语言的指针笔试题
- 经典笔试题:指针详解
- 分享一道笔试题目--关于static和extern变量的问题
- 详解一道C++笔试题,考察重载、覆盖、多态
- 微软2013年实习招聘笔试“22221111”题目详解
- 一道简单的字符指针笔试题
- 阿里巴巴的笔试的一道题目
- 一道编程之美上的问题-腾讯的笔试题目:求数组的部分乘积
- 2012年4月7日腾讯实习生笔试中的一道数据库题目
- 谷歌校园招聘在线笔试题题目一道
- 一道关于java线程中断的题目,求大神指导,昨晚的阿里巴巴笔试题
- 详解一道C++笔试题,考察重载、覆盖、多态
- C/C++一道题目的答案-函数指针与指针函数
- 一道校招笔试的C语言题目
- 一道android笔试题目