代码如下
#include "stdafx.h"
int *pt()
{
int i=2,j=3,x;
x=i*j;
return &x;
}
int yt()
{
int i1=3,j1=3,x1;
x1=i1*j1;
return x1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int j=0,i,x,y;
char a[12];
char *ap;
int *bp;
int (*bt)();//
int xt;
bp=pt();//
printf("(%d|%d)1\n",*bp,bp); //这里bp是正常的是6
bt=yt;
xt=bt();//运行完bp就变成9了
printf("(%d|%d)2\n",xt,&xt);
printf("%s\n","progarm is complete");
scanf("%d",&y);
return 0;
}
不知道为什么xt=bt()运行会把bp的6改成9,代码上看不出任何问题啊。求大神指导。用的VS2005 VC编译的。谢谢!
------解决方案--------------------
你的代码错误大大的
#include "stdafx.h"
int *pt()
{
int i=2,j=3,x;
x=i*j;
return &x;
}
//这里你把局部变量的地址返回了,当函数运行完后,局部变量的地址就无效了,它可能是任意一个数
------解决方案--------------------
正确的代码应该这个样子
#include "stdafx.h"
int *pt()
{
int* x=new int;
int i=2,j=3;
*x=i*j;
return x;
}
更好的方法是个
#include "stdafx.h"
void pt(int& x)
{
int i=2,j=3;
x=i*j;
}
调用
pt(bt)
至于原因找一本基础的c++或者c 方面的书看看,因为不是一两句话可以说清楚
------解决方案--------------------
你好像没有理解指针和引用的概念和区别,建议查阅一下C++ Primer
------解决方案--------------------
一个返回局部变量的地址,一个是返回局部变量的copy