#include<iostream> using namespace std; int main(){int a = 1; int* p = &a; int b = (int)p; int* p1 = (int*)b; cout <<*p1 <<" "<< endl; }、中的p1不是指向b的地址吗
时间: 2023-08-15 17:07:33 浏览: 91
#include <iostream>
是的,p1指向的是b的地址。但是你在将int类型的变量b强制转换为int*类型的指针时,存在类型不匹配的情况,因为int类型的变量b占用的内存空间大小为4字节,而int*类型的指针占用的内存空间大小为8字节(在64位操作系统下)。所以在使用p1指针时,可能会导致访问非法内存的问题。正确的做法应该是将b强制转换为void*类型的指针,然后再转换回int*类型的指针,如下所示:
```c++
#include <iostream>
using namespace std;
int main() {
int a = 1;
int* p = &a;
int b = (int)p;
int* p1 = (int*)(void*)b; // 将b先转换为void*类型的指针,再转换为int*类型的指针
cout << *p1 << endl;
return 0;
}
```
阅读全文