i #include<iostream> using namespace std; int main() { int a = 3; int* p = &a; int b = (int)p; int* p1 = (int*)b; cout << p1 <<" "<<(int*)b << " " << p <<*(int*)b<< endl; return 0; }这段函数中为什么输出*(int*)b的值会出现异常,(int*)b和p代表的不是一个意思么
时间: 2023-08-18 09:08:26 浏览: 92
在这段代码中,我们将指向整型变量 a 的指针 p 的地址强制转换为整型变量 b,并将其转换回指向整型变量的指针 p1。然后,我们尝试输出 *(int*)b 的值,这是不安全的。这是因为我们将指针 p 的地址强制转换为整型变量 b,这将丢失指针本身的信息。当我们将整型变量 b 转换回指针 p1 时,p1 将指向一个未知的地址,访问它的值是未定义的行为,可能会导致程序崩溃或输出意外的结果。因此,为了安全起见,我们不应该将指针的地址强制转换为整型变量,然后再将其转换回指针。
相关问题
解释#include <iostream> using namespace std; int main(O int a=10,b=20; int *p=&a,*q=&b; *p=*p**q; int & ra =a; ra=a; int *&rt=q; *rt=30; *q cout< a=" n p<<"n = nra="<<ra<< n*rt="<<*rt<<endl;
解释是指对某个事物或现象进行阐述、说明,以便让人理解其意义、原理、规律等。解释可以包括文字、图像、语言、演示等多种形式,常用于教育、科研、法律、技术等领域。解释的质量好坏直接关系到信息传递的效果、知识传播的质量,因此需要准确、严谨、清晰、易懂。
#include<iostream> using namespace std; int main(){int a = 1; int* p = &a; int b = (int)p; int* p1 = (int*)b; cout <<*(int*)b <<" "<<p1 << endl; }为什么会出现异常
这段代码的问题在于,将一个指向 int 类型的指针 p 强制类型转换为整型,并将其赋值给变量 b,这是不合法的操作。因为指针类型和整型类型是不同的,它们在内存中的存储方式和大小也不同。当程序试图将整型变量 b 转换回指针类型时,指针类型的大小和整型的大小不一致,会导致出现异常。因此,这段代码会出现异常。
阅读全文