请教个指针函数问题。非常之不解

zbking 2013-02-28 03:10:33
代码如下
#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编译的。谢谢!
...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
michael2988 2013-03-01
  • 打赏
  • 举报
回复
一个返回局部变量的地址,一个是返回局部变量的copy
着魔 2013-02-28
  • 打赏
  • 举报
回复
你好像没有理解指针和引用的概念和区别,建议查阅一下C++ Primer
真相重于对错 2013-02-28
  • 打赏
  • 举报
回复
正确的代码应该这个样子 #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 方面的书看看,因为不是一两句话可以说清楚
zbking 2013-02-28
  • 打赏
  • 举报
回复
to hdt 求版主指导写,该如何该?
zbking 2013-02-28
  • 打赏
  • 举报
回复
引用 2 楼 hdt 的回复:
你的代码错误大大的 #include "stdafx.h" int *pt() { int i=2,j=3,x; x=i*j; return &x; } //这里你把局部变量的地址返回了,当函数运行完后,局部变量的地址就无效了,它可能是任意一个数
我是C新手,bp=pt()有赋值吗?
真相重于对错 2013-02-28
  • 打赏
  • 举报
回复
你的代码错误大大的 #include "stdafx.h" int *pt() { int i=2,j=3,x; x=i*j; return &x; } //这里你把局部变量的地址返回了,当函数运行完后,局部变量的地址就无效了,它可能是任意一个数
zbking 2013-02-28
  • 打赏
  • 举报
回复
对了是在WIN7 64位下编译的。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧