关于指针类型转换的思考

来源:互联网 发布:spss19.0数据分析教程 编辑:程序博客网 时间:2024/05/31 19:33
void main(){char *p="a";int a = 10;p = (char *)a;cout << int(p)<< endl;}

首先看上述这一段代码,

定义一个char类型的指针p,

然后将int型的变量a经过强制类型转换后,变为char *类型,并且将其赋值给p,

这时我们将p用强制类型转换成int型后输出,输出结果为10。

为什么一个指针直接转换成int型就可以输出类型转换之前的值呢?

按照我的最初的想法应该是 通过*((int *)p),将char类型的指针转换成int型的指针,而后取值,但这样做编译器会报错。


经过思考后发现,指针里保存的是地址,而int型的值经过强制类型转换后,

会将这个值本身当成地址存储起来,也就是说,char *p中,p这个时候保存的地址是10,
而我们对这个地址进行取值当然会报错了,这也进一步说明了,为什么可以直接用(int)类型转换后输出原本int的值了。

0 0
原创粉丝点击