关于C++函数返回指针的情况

2025-07-03 09:02:50   世界杯中国广告

本文理解借鉴为什么不可以返回局部变量的指针 首先要明确,局部变量的指针,与局部指针变量的区别 局部变量的指针,若非static,则作用域仅为函数本身,在return之后即被释放,也即指针指向一个无效变量,因此不合理 而局部指针变量则不同,尽管指针变量本身的生命期在return之后也结束,但只要其指向对象有效,其地址也是有效的 开头链接中提到例子:

//例1

int *f1()

{

int x = 10;

return &x;

}

//例2

int *f2(int a[],int n)

{

int *p=a[0];

int i;

for(i=1;i

{

if(*p

p=&a[i];/*p指向更大的数*/

return p;

}

例1为局部变量的指针,若仅为这一个函数,会发现输出为10看似正确,但实则为x的这部分栈空间虽所有权不归x,但也并未被占用,若在庞大的系统中,x的地址被占用,则值不为预期的,因此是错误的 而例2中,指针p指向数组a的空间,而a这部分作为实参传递,函数结束后依旧有效,因此p指向数组中的最大值,返回也依旧有效 再看几个例子:

//例3

int *f3()

{

static int x = 10;

return &x;

}

//例1

int *f4()

{

int* x = new int(19);

return x;

}

例3和4都是合理的,因为例3的x为静态变量,在第一次函数调用时被初始化,之后的运行过程中一直存在,因此返回其引用也合理; 而例4则是因为申请了堆上的内存,在delete之前是一直有效的,也因此要注意new或malloc的空间,一定不能忘记delete或free

品牌如何“燃爆”赛事营销?
大神攻略丨地图区域分类超细致讲解,向更高级区域进发!