𝙉𝙞𝙘𝙚!!👏🏻???????👏🏻??????? 👏🏻?????:Solitary-walk
? ? ? ?? ? ━━━┓
? ? ?- 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
┗━━━━━━━ ?? ?本人座右铭 : ? 欲达高峰,必忍其痛;欲戴王冠,必承其重。
👑💎💎👑💎💎👑?
💎💎💎自💎💎💎
💎💎💎信💎💎💎
👑💎💎 💎💎👑 ? ?希望在看完我的此篇博客后可以对你有帮助哟👑👑💎💎💎👑👑 ? 此外,希望各位大佬们在看完后,可以互赞互关一下,看到必回
👑👑👑💎👑👑👑
?想必各位老铁们也知道,C语言的灵魂就在于指针,他很神奇,就像一把神奇的钥匙,可以打开指定的房间。有了这个精确的地址,我们也就不用再怕迷路了,哈哈哈。
OK,话不多说,接下来给各位老铁们看个神奇的代码,没错,就是此时屏幕前的你,顺便看看自己是否对指针轻松拿捏,不过话说在前面,下面这个代码要是对指针没有一定的功力再结合“码图”(也就是画图),可不是件容易的事
#include<stdio.h>
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;
}
?
?各位老铁们咱也就动起来吧,看看自己咋样
1:cpp初始状态是指向数组cp的首元素的地址
2:++cpp注意这是前置加加(也就意味着cpp的指向要改变,同时也会对后面cpp的一系列操作有影响)cpp此时指向cp数组的第二个元素的地址
3:**++cpp 第一次解引用是指向c+2,再一次解引用是指向POINT这个字符串所指向的首元素地址
4:结果:POINT
草图如下:
1:看到这个表达式可能有些老铁会发懵,不知从何下手(优先级)
?2:++cpp:指向数组cp的第二个元素(cp+2)
3:此时对++cpp进行解引用:指向数组C第二个元素的地址(c+1),再--指向的是数组C第一个元素的地址(c+ 0)对他进行解引用指向ENTER这个字符串首字符地址
4:此时最后指向 +3 的操作:对字符串跳过三个字符指向? E
5:打印结果: ER
1:*cpp[-2]+3 ==? ?*(*(cpp - 2)) +3
2:cpp指向数组cp的第二个元素(cp+2)
3:cpp -2指向 cp+0?
4:*(cpp-2)访问的是 c+3
5:*(*(cpp-2)) 访问的是字符串 FIREST指向的第一个字符从地址
6: *(*(cpp - 2)) +3? 此时指向 E的地址
7:打印:ST
?1:cpp[-1][-1]+1? == *(*(cpp-1)-1) +1
2:cpp-1 == cp+2-1 是指向 cp+1?
3:此时解引用是指向 c+2 的地址 ,此时在对这个地址-1,是指向c+1这个地址
4:*(*(cpp-1)-1)此时是的? c+1这个地址进行解引用(指向NEW的首字符地址)
注意:可不是对c+ 2 这个地址解引用(错在:对cpp-1后忘了解引用,就比如说我,嘻嘻嘻)
5:?*(*(cpp-1)-1) +1 指向 E这个字符对应的地址
6:打印? :EW
?分析半天是对是错呢,咱让程序跑起来也看一眼:
结果:
或许这就是编程的魅力,我永远沉迷于此,陶醉其中。希望各位老铁看到我的这篇博客可以对指针有更深的理解,也希望"小白"也能有所收获,不过咱还是有啥说啥,这确实是需要一点点的功力的,没有点底子可能或许稍微吃力,欧克,又到了各位主角的舞台了(咱一波关注,一波赞走起,也是更好激励我的)?
温馨提示:最近天气比较极端,希望各位老铁照顾好自己,生病真的很难受,状态也不在线(我就是扛了一周左右)