C进阶|关于C语言指针的笔试题

今天下了超级大的雪,被困在寝室出不去了,来更新三道关于指针的笔试题
1,2比较简单
3比较难
来看第一题,涉及到二维数组
C进阶|关于C语言指针的笔试题
文章图片

C进阶|关于C语言指针的笔试题
文章图片

其实可以通过画个图很容易就找到ptr1,ptr2所指向的位置,答案就很明了了。
第二题,这里主要要注意数组a里面的内容是啥,以及%s和%p再printf函数中打印内容的区别,
C进阶|关于C语言指针的笔试题
文章图片

这个题也比较简单,首先 char*a[]是一个内含char*类型地址的指针数组,在初始化时初始化了3个字符串,但这个指针数组内存放的就是三个字符串的地址,再用二级指针**pa指向了指针数组a,pa++就指向了at的地址,打印%s就会打印地址指向的内容,如果是%p,那么就是at的地址。
第三题,这个题比较难,需要反复看看
C进阶|关于C语言指针的笔试题
文章图片

首先来看第一个printf,这个比较简单,首先++让cpp指向了c+2,再解引用两次就会得到POIN
C进阶|关于C语言指针的笔试题
文章图片
第二个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语言指针的笔试题】

    推荐阅读