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

int main() {
    int(*p)[10]; //定義一個數(shù)組指針
    int mm[10];
    int* pp;
    p = &mm; //數(shù)組mm 的地址放入指針p 當中
    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一定要轉換為int 類型。然后,這里的賦值,我想問問賦值的內(nèi)容是p位置的地址還是*p 指針所存儲的內(nèi)容?

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

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

插入代碼
     8:     p = &mm; //數(shù)組mm 的地址放入指針p 當中
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 當中。接下來,執(zhí)行了三個mov 指令。最終的的mov 指令就是將寄存器eax 當中的指令放入[pp]。換一句話說指針pp 和指針 p 里面的值其實是一樣的。

 

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

回復
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指針不是一個量級的,只是在此處指向了同一個整數(shù)而已,即mm[0]

 

回復