C指针笔试题,蛋疼的多重指针运算,谭浩强的阴影
对指针的概念清晰的话,做这种题只要耐心就行,然而看这种题就烦(被同学吐槽为谭浩强的阴影……草泥马这种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指针笔试题,蛋疼的多重指针运算,谭浩强的阴影相关推荐
- 谭浩强c语言第八章指针ppt,谭浩强c语言第八章_指针.ppt
谭浩强c语言第八章_指针 第八章 8.1地址和指针的概念 8.2 变量的指针和指向变量的指针变量 8.7 指针数组和指向指针的指针 8.7.1 指针数组的概念 一个数组,若其元素均为指针类型数据,称为 ...
- 【C语言】大厂指针笔试题(1码+1图)详解——程序结果判断题
C指针相关系列 1.一篇就够了(建议收藏)--超详解sizeof与strlen的用法 2.C语言之深入指针进阶(建议收藏以备不时之需) 3.回炉重造的C之指针+结构体 [C语言]大厂指针笔试题详解(1 ...
- 这八道经典指针笔试题你都会做嘛?
本文详细介绍了八大指针经典笔试题,内涵盖指针大部分的用法, 全部了解掌握其原理之后对指针的学习大有帮助!!! 对指针掌握 也就掌握了内存,C语言也就没有什么更绕的了 详解八道经典指针笔试题 一.八道经 ...
- 【维生素C语言】练习:画图解析C语言指针笔试题
原标题:" 祖安猎码人"在线手撕代码画图解析[C指针笔试题] 前言: C语言指针笔试题,建议做完后再看答案.本篇博客有详细的解析部分,对每一道题进行深度的画图解析.如果你想复习下指 ...
- 指针笔试题及其解析、字符串左旋、字符串追加strcat
笔试题1 #include <stdio.h>int main() {int a[4] = { 1, 2, 3, 4 };int* ptr1 = (int*)(&a + 1);in ...
- [原创] 指针操作程序答案 — 谭浩强C语言习题答案
这两天复习RenMian给我留下谭浩强的C语言教程,温故而知新,夯实基础知识, 把谭浩强版C语言的第十章<指针>的书复习后把所有的编程习题做了一遍,贴出来激励自己一下,也希望有用的同学可以 ...
- 指针和多重指针的一些理解( 谭浩强的恶梦....... )
说到C语言,就不得不说到指针,指针是有点难理解,对于刚学C语言的同学来说是很痛苦的...以前对指针的概念很模糊,只知道指针和地址相关,但是最近看了一本<深入理解计算机系统>,感觉好像有点开 ...
- C语言指针 谭浩强版总结
不掌握指针就是没有掌握C的精华 文章目录 不掌握指针就是没有掌握C的精华 一.指针是什么 二.指针变量 三.通过指针引用数组 四.通过指针引用字符串 五.指向函数的指针 六.返回指针值的函数 七.指针 ...
- 指针笔试题详细介绍,让你不再惧怕指针【c语言】
int main() {int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1); //&a+1的类型是int( * )[5]pr ...
最新文章
- 研究了北京的14848条道路,我们竟然发现……
- LESSON 10.110.210.3 SSE与二分类交叉熵损失函数二分类交叉熵损失函数的pytorch实现多分类交叉熵损失函数
- node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...
- lambda 表达式中的 this 与普通情况下的 this 指向
- 浏览器渲染机制面试_【前端面试必考题】页面渲染机制(一)
- mfc连接mysql增删改查_java实现mysql数据库增删改查
- javascript将内嵌式广告隐藏
- 微信短内容要来了!新功能已开启内测申请
- web前端开发,自学的流程可以怎样?
- 微信oauth2接口获取用户的openid
- ucos-II 任务间同步源码分析(一)
- Ubuntu 20.04 上安装使用 ibus-rime(超实用)
- 怎么取消linux ssh互信,[系统-linux] ssh互信操作
- 建议收藏|一文带你读懂 Prisma 的使用
- Scikit-learn的六大功能
- 《算法笔记》胡凡——4.2散列
- 为大家推荐几个不错的公众号!
- 道周中学2012年高三地理寒假作业答案
- 查看电脑使用了多长时间
- cgroup架构及控制文件介绍