首頁(yè)
社區(qū)
課程
招聘
下面的代碼當(dāng)中 pp = (int *)*p 是什么含義?看起來(lái)是將指針p 強(qiáng)制轉(zhuǎn)換為(int*)類型并且賦值給PP指針。
插入代碼
#include <iostream>
using namespace std;

int main() {
    int(*p)[10]; //定義一個(gè)數(shù)組指針
    int mm[10];
    int* pp;
    p = &mm; //數(shù)組mm 的地址放入指針p 當(dāng)中
    pp = (int*)*p;
    for (int i = 0; i < 10; i++) {
        *pp++ = i;
    }
    pp = (int*)*p;
    for (int i = 0; i < 10; i++) {
        cout << *pp++ << "-";
    }
    return 0;
}

我的理解是上面定義的PP指針類型是“int” ,那么指針p一定要轉(zhuǎn)換為int 類型。然后,這里的賦值,我想問(wèn)問(wèn)賦值的內(nèi)容是p位置的地址還是*p 指針?biāo)鎯?chǔ)的內(nèi)容?

收藏
2條回答
天象獨(dú)行 2021-4-29 2021-4-29編輯

我自己看了一下,大概理解了。詳細(xì)如下反匯編代碼:

插入代碼
     8:     p = &mm; //數(shù)組mm 的地址放入指針p 當(dāng)中
005824B2  lea         eax,[mm]  
005824B5  mov         dword ptr [p],eax  
     9:     pp = (int*)*p;
005824B8  mov         eax,dword ptr [p]  
005824BB  mov         dword ptr [pp],eax

首先是,指令“l(fā)ea eax,[mm]”即將數(shù)組的地址放入了寄存器eax 當(dāng)中。接下來(lái),執(zhí)行了三個(gè)mov 指令。最終的的mov 指令就是將寄存器eax 當(dāng)中的指令放入[pp]。換一句話說(shuō)指針pp 和指針 p 里面的值其實(shí)是一樣的。

 

簡(jiǎn)單的說(shuō)就是
pp = (int)p 代碼可以說(shuō)就是指針變量與指針變量的賦值。就是將指針p 的內(nèi)容放入指針pp 當(dāng)中。

回復(fù)
Golden_Boy 2021-5-1 2021-5-1編輯

p是行指針,pp=&mm[0];
pp = (int )p;等于pp=(int)(p+0);
(p+1)指向下一行p+1也是指向下一行,而本題是一維數(shù)組,p和pp指針不是一個(gè)量級(jí)的,只是在此處指向了同一個(gè)整數(shù)而已,即mm[0]

 

回復(fù)
C++ 指針
  參與學(xué)習(xí)     人
  提問(wèn)次數(shù)     100 個(gè)
我的問(wèn)答 領(lǐng)取收益
0
我的提問(wèn)
0
我的回答
0
學(xué)習(xí)收益