今天下了超级大的雪,被困在寝室出不去了,来更新三道关于指针的笔试题
1,2比较简单
3比较难
来看第一题,涉及到二维数组
文章图片
文章图片
其实可以通过画个图很容易就找到ptr1,ptr2所指向的位置,答案就很明了了。
第二题,这里主要要注意数组a里面的内容是啥,以及%s和%p再printf函数中打印内容的区别,
文章图片
这个题也比较简单,首先 char*a[]是一个内含char*类型地址的指针数组,在初始化时初始化了3个字符串,但这个指针数组内存放的就是三个字符串的地址,再用二级指针**pa指向了指针数组a,pa++就指向了at的地址,打印%s就会打印地址指向的内容,如果是%p,那么就是at的地址。
第三题,这个题比较难,需要反复看看
文章图片
首先来看第一个printf,这个比较简单,首先++让cpp指向了c+2,再解引用两次就会得到POIN
文章图片
第二个printf,因为++优先级比较高,所以cpp再向下跳,再解引用,找到c+1的空间,然后再--,相当于c+1-1,导致该空间指向了c+0,也就是上面这个监视图所指向的地址。也就是改变了指向的空间,再解引用找到了指向ENTER的空间,也就是ENTER的首地址,再进行加3,跳过E,N,T,找到ER。
第三个printf,首先来说明*cpp[-2]的含义,**(cpp-2)+3,首先cpp-2指向了c+3的位置,解引用之后拿到了该空间的内容c+3,再解引用找到了FIRST的地址,再加3,打印出ST。
第四个printf和第三个类似,cpp[-1][-1]+1的含义是*(*(cpp-1)-1)+1,规律同上,推出EW。
【C进阶|关于C语言指针的笔试题】
推荐阅读
- stm32|基于I2C/SPI总线的温湿度采集与OLED显示
- c语言|C语言双指针——经典题型
- c语言|如何用C语言实现小游戏——扫雷
- c语言|C语言—实用的调试技巧
- 深度剖析C语言数据在内存中的存储
- C语言深度解剖读书笔记2
- c语言|如何用C语言来实现——五子棋游戏
- C语言分支和循环语句
- 初识C语言