#include<iostream>
using namespace std;
int *getInt1()
{
int value1 = 20;
return &value1;
}
int main()
{
int *p ;
p = getInt1();//由于函数的返回值是value1的地址,而且变量value1是函数内的局部变 量,当这句表达式完成了后,函数getInt1()这片内存空间就被释放掉 了。那么p就不知道指向谁了。
cout << *p << endl;
return 0;
}
所以要确保返回地址的意义;(返回一个处于生命周期中的变量的地址)
#include<iostream>
using namespace std;
int value1 = 20;//要定义全局变量;
int *getInt1()
{
return &value1;
}
int main()
{
int *p ;
p = getInt1();//由于定义的全局变量,p指向value1的地址,函数getInt1()释放掉后,
//p还是指向value1的地址
cout << *p << endl;
return 0;
}
由于要使用全局变量必须特别小心;还有一种方法使用静态局部变量确保返回的地址的意义;
#include<iostream>
using namespace std;
int *getInt1()
{
static int value1 = 20;//确保value1不被释放掉;
return &value1;
}
int main()
{
int *p ;
p = getInt1();//由于定义的全局变量,p指向value1的地址,函数getInt1()释放掉后,
//p还是指向value1的地址
cout << *p << endl;
return 0;
Keine Kommentare:
Kommentar veröffentlichen