Dienstag, 29. September 2015

返回指针值的函数

#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