首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

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

2013-06-25 
请教个指针函数问题。非常之不解代码如下#include stdafx.hint *pt(){int i2,j3,xxi*jreturn &x}in

请教个指针函数问题。非常之不解
代码如下
#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

热点排行