读书人

C++中指针函数的有关问题

发布时间: 2012-03-25 20:55:16 作者: rapoo

求助C++中指针函数的问题?
#include "iostream"
using namespace std;

int* getNum()
{
int arrayT[20];
arrayT[0]=arrayT[1]=1;
for(int i=2;i<20;i++)
{
arrayT[i]=arrayT[i-1]+arrayT[i-2];
}
return arrayT;
}
int main()
{
int *p=getNum();
for(int i=0;i<20;i++)
cout<<*(p+i)<<endl;
}
[code=C/C++][/code]
这个程序我想要得到结果实1,1,2,3,5,8,13,21..........
但是得到的结果是:
1
2882436
263611910
259318968
0
264236264
-1
0
264236360
2882464
263592278
0
0
264236352
0
2882472
263588439
2882488
263699398
264236352
请教c++高手这是什么原因导致的?望不吝赐教!

[解决办法]
你返回的是指针,可惜你的指针指向了在栈里面的内存地址,当该函数返回时,这块内存就失效了。而你还用它进行取值肯定是得不到正确的值的。
[解决办法]
你返回了局部数组的指针。
[解决办法]
局部指针的话,通常人都认为指向的局部变量失效,那该地址存的是垃圾值,其实不然,系统要在接到你要操作这个内存的指令后才会把它清0,它并不是立刻清0,就好比文件一样,并不是接到指令立刻把文件全清0,只是标记告诉系统这个空间可用,文件一般是在的。
数组也是一样,下面有个小实例,第一个能正常输入,第二个则不行,因为在它之前操作了这块内存,操作了这块内存。

C/C++ code
#include "stdafx.h"char * Cstr(void){    char a[10] = "like";    return a;    }int main(void) {     char *a=Cstr();    printf("%c\n",*(a+1));    printf("%c\n",*(a+1));    return 0; } 

读书人网 >C++

热点推荐