两道指针难题

简介: 两道指针难题

题目一


#include <stdio.h>
int main()
{
    int a[5][5];
    int(*p)[4];
    p = a;
    printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
    return 0;
}


为了大家好理解 我画图解释下这一题

dfa643541f9e407ba1ccfff2d17de444.png


首先 我们画出a 这是一个二维数组


紧接着 就轮到p了 p是一个数组指针 它指向一个4个元素的数组


da17d33b0d5740ab8fced048e337eda0.png


这是它们两个分别表示的位置


我们都知道 指针相减表示的是它们之间相差的元素 这里的元素相差是-4


-4 以%d的形式打印就是-4


而它在内存中储存的是补码 所以说打印形式是 fffffffc


910ea727447244e3b71df899b2a0b2e7.png


题目二


int main()
{
 char *c[] = {"ENTER","NEW","POINT","FIRST"};
 char**cp[] = {c+3,c+2,c+1,c};
 char***cpp = cp;
 printf("%s\n", **++cpp);
 printf("%s\n", *--*++cpp+3);
 printf("%s\n", *cpp[-2]+3);
 printf("%s\n", cpp[-1][-1]+1);
 return 0;
}


首先 char*c[] 是一个指针数组 里面有四个指针 enter new point first

如图


db1133ddef2443b687b76ae3f4d59c87.png

cp也是一个指针数组 里面有四个指针

如图

a5d38681ad374aa1907bd90783662b47.png

最后的ccp也是一个指针


指向的cp8c047feddf83416d9d30d9ab5a88baa8.png



第一个ccp++之后解引用 实际上指向了 c+2 再解引用打印出point


因为这个时候前缀++ 实际上ccp的位置改变了


第二题 首先对于ccp前缀++ 这个时候它的位置又改变了 变成了指向c+1


再对c+1进行–操作之后解引用这个时候它的值也改变了 变成了c


之后c+3 实际上从er开始了 打印出er


第三题


实际上是对于ccp-2之后解引用 再解引用 之后指针位置向后移动3


打印出来是st


c88f96c8b84d4962a3d93f8d449141ea.png


第四题实际上是 *((ccp-1)-1)+1


3de5ffc2eae94e309bfbceba0142b06a.png


打印出来ew


3d9a2ea3b27247df94da2c16088bfd6d.png


实际上的结果也符合预期


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够


不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯


相关文章
|
7月前
|
机器学习/深度学习 算法 测试技术
青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”(二)
这篇内容是关于解题策略的,主要介绍了在面对应用题时可以采用的“三板斧”方法:举例、模拟和找规律。通过一个走楼梯的例子详细解释了这三个步骤如何运用。首先,举例将抽象问题具体化,比如走5级台阶有几种方式。其次,通过模拟不同情况,例如思考走每一步的可能,发现递归或循环的模式。最后,通过找规律归纳出一般性的解决方案,这里发现走台阶问题与斐波那契数列相关。文章还提到了一个拓展案例——矩形覆盖问题,同样可以用类似的方法分析。总的来说,文章强调了解题过程中理解和转化问题的重要性,以及通过训练提升这方面能力。
62 0
|
7月前
|
C语言
青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”(一)
这篇内容介绍了C语言学习中的经典例题——斐波那契数列,强调了解题思路的重要性。斐波那契数列是一个数列,其中每个数是前两个数的和。文章指出,很多类似题目,如“青蛙跳台阶”,实质上都在考察斐波那契数列的实现。文中提供了斐波那契数列的定义、代码实现和递归与非递归的思路,并鼓励读者从问题中分析出解题模型,而非直接套用已知方法。此外,还提及了一道相关题目“矩形覆盖问题”,以供进一步练习。
61 0
|
7月前
教你三指针拿捏链表翻转
教你三指针拿捏链表翻转
C生万物 | 从浅入深理解指针【第四部分】(qsort的使用和模拟实现)
C生万物 | 从浅入深理解指针【第四部分】(qsort的使用和模拟实现)
|
人工智能 C语言 C++
数组和指针一道非常值得深思的笔试题
数组和指针一道非常值得深思的笔试题
64 0
|
存储 C语言 索引
C素养提升-指针专题
在c语言中,内存单元的地址成为指针,专门用来存放地址的变量,称为指针变量。在不影响理解的情况中,有时对地址、指针和指针变量不区分,统称为指针。
58 0
|
存储 编译器 程序员
<<c和指针>>温故及问题研讨(第三章)
这篇文章向大家分享<<C和指针>>第三章的内容–数据,这篇文章在专栏:书籍分享中,有兴趣阅读更多关于<<C和指针>>的朋友可以来浏览一下.和之前一样,我分享的内容是我认为容易被忽略的点,和C语言中更接近于底层的一些逻辑.有些内容我在C语言的学习中已经分享过了的,我会给出之前的博客链接并且跳过这一段.
|
存储 C语言 C++
【搞透C语言指针】那年我双手插兜, 不知道指针是我的对手(一)
【搞透C语言指针】那年我双手插兜, 不知道指针是我的对手
73 0
|
算法 C语言
【搞透C语言指针】那年我双手插兜, 不知道指针是我的对手(二)
【搞透C语言指针】那年我双手插兜, 不知道指针是我的对手
183 0