对指针的概念清晰的话,做这种题只要耐心就行,然而看这种题就烦(被同学吐槽为谭浩强的阴影……草泥马这种C风格题有意义吗?出题人脑子被门夹了?而且C++11都不支持字面值字符串直接转换成char*了。好吧,就算要大骂一通出题人,该做还是做。)

分析三行初始化代码:

1、c[0]指向"HELLO",c[1]指向"NEW",c[2]指向"WORLD",c[3]指向"SAYHI"。

cp[0]=c+3,即cp[0]=&c[3],因此

2、cp[0]指向c[3],cp[1]指向c[2],cp[2]指向c[1],cp[3]指向c

cpp=cp,cp类型是char**[4]类型,数组a在作为等号的右参数时会降格成&a[0],因此cpp=&cp[0]

3、cpp指向cp[0]

现在到这里来一个个分析语句

1、**++cpp

++cpp,即cpp=cpp+1  【改变了cpp的值】

指针+1是怎么运算呢?这里我还卡住了

举例,int a[] = { 1,2,3 }; int* p = a; p++;  这里p是int*的指针,p++就指向了a[1],相当于p指向的地址向后移动了sizeof(*p)个字节。

OK,cpp指向cp[0],++cpp就是cpp=&(cp[0]+sizeof(*cpp))即cpp=&cp[1];

接着就是2次解引用,*++cpp就是*(&cp[1])也就是cp[1],**++cpp就是*cp[1]=*(&c[2])即c[2],结果是

WORLD

注意!这里的运算改变了cpp的值!这一句执行后cpp指向的是cp[1]!

2、*--*++cpp+3

注意+运算优先级是低于*、&、前置++、前置--(这4个同级)。

++cpp = &cp[2]   【改变了cpp的值】

*++cpp = *(&cp[2])即cp[2]

--*++cpp = --cp[2] = &(c[1]-sizeof(c[1])) = &c[0]。

*--*++cpp = *(&c[0]) = c[0],最后c[0]+3

LO

注意!这里的运算改变了cpp的值!这一句执行后cpp指向的是cp[2]!

3、*cpp[-2]+3

注意[]运算优先级是高于*、&、前置++、前置--

这里回顾数组下标运算符[]:int a[] = { 1,2,3 }; int p = a[1]; 即int p = *(a + 1)

cpp[-2] = *(cpp-2) = *&(cp[2]-2*sizeof(cp[2])) = *&cp[0] = cp[0]

*cpp[-2] = *cp[0] = *(c+3) = c[3]

*cpp[-2]+3即

HI

注意!这里的运算并未改变cpp的值!这一句执行后cpp指向的是cp[2]!

4、cpp[-1][-1]+1

cpp[-1] = *(cpp-1) = *&(cp[2]-sizeof(cp[2]) = *&cp[1] = cp[1]

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

cpp[-1][-1]+1 = c[1]+1即

EW

呼,做完了还是想骂一句草泥马=_,=

转载于:https://www.cnblogs.com/Harley-Quinn/p/7513077.html

C指针笔试题,蛋疼的多重指针运算,谭浩强的阴影相关推荐

  1. 谭浩强c语言第八章指针ppt,谭浩强c语言第八章_指针.ppt

    谭浩强c语言第八章_指针 第八章 8.1地址和指针的概念 8.2 变量的指针和指向变量的指针变量 8.7 指针数组和指向指针的指针 8.7.1 指针数组的概念 一个数组,若其元素均为指针类型数据,称为 ...

  2. 【C语言】大厂指针笔试题(1码+1图)详解——程序结果判断题

    C指针相关系列 1.一篇就够了(建议收藏)--超详解sizeof与strlen的用法 2.C语言之深入指针进阶(建议收藏以备不时之需) 3.回炉重造的C之指针+结构体 [C语言]大厂指针笔试题详解(1 ...

  3. 这八道经典指针笔试题你都会做嘛?

    本文详细介绍了八大指针经典笔试题,内涵盖指针大部分的用法, 全部了解掌握其原理之后对指针的学习大有帮助!!! 对指针掌握 也就掌握了内存,C语言也就没有什么更绕的了 详解八道经典指针笔试题 一.八道经 ...

  4. 【维生素C语言】练习:画图解析C语言指针笔试题

    原标题:" 祖安猎码人"在线手撕代码画图解析[C指针笔试题] 前言: C语言指针笔试题,建议做完后再看答案.本篇博客有详细的解析部分,对每一道题进行深度的画图解析.如果你想复习下指 ...

  5. 指针笔试题及其解析、字符串左旋、字符串追加strcat

    笔试题1 #include <stdio.h>int main() {int a[4] = { 1, 2, 3, 4 };int* ptr1 = (int*)(&a + 1);in ...

  6. [原创] 指针操作程序答案 — 谭浩强C语言习题答案

    这两天复习RenMian给我留下谭浩强的C语言教程,温故而知新,夯实基础知识, 把谭浩强版C语言的第十章<指针>的书复习后把所有的编程习题做了一遍,贴出来激励自己一下,也希望有用的同学可以 ...

  7. 指针和多重指针的一些理解( 谭浩强的恶梦....... )

    说到C语言,就不得不说到指针,指针是有点难理解,对于刚学C语言的同学来说是很痛苦的...以前对指针的概念很模糊,只知道指针和地址相关,但是最近看了一本<深入理解计算机系统>,感觉好像有点开 ...

  8. C语言指针 谭浩强版总结

    不掌握指针就是没有掌握C的精华 文章目录 不掌握指针就是没有掌握C的精华 一.指针是什么 二.指针变量 三.通过指针引用数组 四.通过指针引用字符串 五.指向函数的指针 六.返回指针值的函数 七.指针 ...

  9. 指针笔试题详细介绍,让你不再惧怕指针【c语言】

    int main() {int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1); //&a+1的类型是int( * )[5]pr ...

最新文章

  1. 研究了北京的14848条道路,我们竟然发现……
  2. LESSON 10.110.210.3 SSE与二分类交叉熵损失函数二分类交叉熵损失函数的pytorch实现多分类交叉熵损失函数
  3. node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...
  4. lambda 表达式中的 this 与普通情况下的 this 指向
  5. 浏览器渲染机制面试_【前端面试必考题】页面渲染机制(一)
  6. mfc连接mysql增删改查_java实现mysql数据库增删改查
  7. javascript将内嵌式广告隐藏
  8. 微信短内容要来了!新功能已开启内测申请
  9. web前端开发,自学的流程可以怎样?
  10. 微信oauth2接口获取用户的openid
  11. ucos-II 任务间同步源码分析(一)
  12. Ubuntu 20.04 上安装使用 ibus-rime(超实用)
  13. 怎么取消linux ssh互信,[系统-linux] ssh互信操作
  14. 建议收藏|一文带你读懂 Prisma 的使用
  15. Scikit-learn的六大功能
  16. 《算法笔记》胡凡——4.2散列
  17. 为大家推荐几个不错的公众号!
  18. 道周中学2012年高三地理寒假作业答案
  19. 查看电脑使用了多长时间
  20. cgroup架构及控制文件介绍

热门文章

  1. 用一个栈实现另一个栈的排序
  2. how to use the mathmatical constant e in conjunction with a vector
  3. delphi XE2-新的里程碑
  4. memset与malloc性能测试(转)
  5. DIV水平方向居中的几种方法
  6. TypeScript 素描 - 函数
  7. nagios二次开发(一)---开发思想
  8. erlang-百度云推送Android服务端功能实现-erlang
  9. Linuxnbsp;rpmnbsp;命令参数使用…
  10. jQ.Mobi框架介绍