帮忙看一下,指针这么用对吗?

来源:百度知道 编辑:UC知道 时间:2024/07/05 01:26:48
char* fun2()
{
int m = 4567;
return (char *)&m;
}
cout<<fun2()<<endl;

我想把变量m里面的内容用char类型显示出来(乱也好)。
我这么做对吗? 如果对的话,为什么我改变m的值显示的结果不变呢?
-------------------------
----------------------------------------
谢谢[kuaidh00 - 举人 五级] 这位兄弟不吝赐教,一般来说0分的问题,很少有人回答这么详细,所以再追加10分!
下面我来补充一下!
为什么我改变m的值显示的结果不变呢?
----------------------------------
因为:你的m是个局部变量。函数调用完毕后,就释放了。所以你改变m的值并没什么意义。

解决方法。你将m定义成全局变量就可以看到变化了。
==========================================
的确是这种问题,起初我也考虑过这个问题,因为也可能的编译器不同的问题吧,在有的编译器里面,如果一个局部变量被销销毁它只是简单的标识为这个变量被销毁了,而没有清空这块内存的数据。而我现在用的这个编译器,它把数据也清空了。
-------------------------
当你用char*强制转换后,就只会提出一个字节的内容了。
--------------------------
这点,我想[kuaidh00] 老兄可能回答错了。char*用cout或printf("/s");输出系统会把它当做字符串处理。至少我试过是这样的。

先要肯定一下,你的指针用的是对的。指针是可以强制转换成别的类型的。当然你的程序中也可以。

为什么我改变m的值显示的结果不变呢?
----------------------------------
因为:你的m是个局部变量。函数调用完毕后,就释放了。所以你改变m的值并没什么意义。

解决方法。你将m定义成全局变量就可以看到变化了。

==========================================
给你补充一点:
当你声明int m;
m=4567;(16进制表示是:000011D7)
此时&m是一个int*型的指针。在内存中是如下形式:
--- <--int型指针(4B)
D7
---
11
---
00
---
00
---
用int*会取出4个字节,所以可以显示4567。

当你用char*强制转换后,就只会提出一个字节的内容了。
比如:
#include <iostream>
using namespace std;
int m;

char* fun2()
{
m = 126; //此处改为126,就会显示“~”。
return (char*)&m;
}

void main()
{
cout<<fun2()<<endl;
}

请问下你在哪改变了M的值呢?

cout<<*fun2()<<endl;