首页
社区
课程
招聘
下面的代码当中 pp = (int *)*p 是什么含义?看起来是将指针p 强制转换为(int*)类型并且赋值给PP指针。
插入代码
#include <iostream>
using namespace std;

int main() {
    int(*p)[10]; //定义一个数组指针
    int mm[10];
    int* pp;
    p = &mm; //数组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 类型。然后,这里的赋值,我想问问赋值的内容是p位置的地址还是*p 指针所存储的内容?

收藏
2条回答
天象独行 2021-4-29 2021-4-29编辑

我自己看了一下,大概理解了。详细如下反汇编代码:

插入代码
     8:     p = &mm; //数组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

首先是,指令“lea eax,[mm]”即将数组的地址放入了寄存器eax 当中。接下来,执行了三个mov 指令。最终的的mov 指令就是将寄存器eax 当中的指令放入[pp]。换一句话说指针pp 和指针 p 里面的值其实是一样的。

 

简单的说就是
pp = (int)p 代码可以说就是指针变量与指针变量的赋值。就是将指针p 的内容放入指针pp 当中。

回复
Golden_Boy 2021-5-1 2021-5-1编辑

p是行指针,pp=&mm[0];
pp = (int )p;等于pp=(int)(p+0);
(p+1)指向下一行p+1也是指向下一行,而本题是一维数组,p和pp指针不是一个量级的,只是在此处指向了同一个整数而已,即mm[0]

 

回复