【原创】二级指针中在内存中的样子
生活随笔
收集整理的這篇文章主要介紹了
【原创】二级指针中在内存中的样子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
長話短說,只要能理解指針,基本上二級指針就很好理解了。
看看下面的栗子:
int a,b; int array[10];
int *pa; pa=&a; //&a 是一個指針表達式。
Int **ptr=&pa; //&pa 也是一個指針表達式。
*ptr=&b; //*ptr 和&b 都是指針表達式。
pa=array; pa++; //這也是指針表達式。
OK。如果你還不理解就調試一下,看看內存中的樣子和匯編就明白了。
00BE3C05 89 45 FC mov dword ptr [ebp-4],eax 7: int a, b;8: int array[10];9: int *pa;10: pa = &a;//這里也很好理解了。不說了。 00BE3C08 8D 45 F4 lea eax,[a] 00BE3C0B 89 45 AC mov dword ptr [pa],eax 11: int **ptr = &pa; 00BE3C0E 8D 45 AC lea eax,[pa] 00BE3C11 89 45 A0 mov dword ptr [ptr],eax 12: *ptr = &b;//這里可以看出來了吧,它與一級指針不同的地方。這塊先賦值了。再取值。再賦值,主要是取出一級指向的地址的值。 00BE3C14 8B 45 A0 mov eax,dword ptr [ptr] 00BE3C17 8D 4D E8 lea ecx,[b] 00BE3C1A 89 08 mov dword ptr [eax],ecx 13: pa = array; 00BE3C1C 8D 45 B8 lea eax,[array] 00BE3C1F 89 45 AC mov dword ptr [pa],eax 14: pa++; 00BE3C22 8B 45 AC mov eax,dword ptr [pa] 00BE3C25 83 C0 04 add eax,4 00BE3C28 89 45 AC mov dword ptr [pa],eax 15: 16: system("pause"); 00BE3C2B 8B F4 mov esi,esp 00BE3C2D 68 58 58 BE 00 push 0BE5858h 00BE3C32 FF 15 14 91 BE 00 call dword ptr ds:[0BE9114h] 00BE3C38 83 C4 04 add esp,4 00BE3C3B 3B F4 cmp esi,esp 00BE3C3D E8 F9 D4 FF FF call __RTC_CheckEsp (0BE113Bh) 17: return 0; 00BE3C42 33 C0 xor eax,eax 18: }
看看監視器中的樣子:
?
這下很好理解了吧。
?
轉載于:https://www.cnblogs.com/blck/p/8979573.html
總結
以上是生活随笔為你收集整理的【原创】二级指针中在内存中的样子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字符设备:前言
- 下一篇: stm32 invalid rom ta