求“不能从函数中返回一个指向该函数局部自动变量的指针”的解释,该怎么处理
求“不能从函数中返回一个指向该函数局部自动变量的指针”的解释
#include<iostream>
using namespace std;
int *max(int *dd,int size);
int main()
{
int a[]={1,3,5,6,54,543,2,456,10};
cout<<"求最大值"<<endl;
cout<<*max(a,sizeof(a)/sizeof(int))<<endl;//此处还是对max的间接引用。
system("pause");
return 0;
}
int *max(int *dd,int size)
{
int *cc=dd;
for(int i=0;i<size;i++)
{
if(*cc<dd[i])
{
cc=&dd[i];
}
}
return cc;
}
虽编译正常,但看了“不能从函数中返回一个指向该函数局部自动变量的指针”“返回的指针所指向的数据不能够是函数内声明的变量”之类的话,返回函数内创建的cc是错了吗?教程中唯一的改动是将CC替换为了max,可max不也是函数内创建的吗?
------解决方案--------------------
不能返回局部变量的指针或引用 比如
const int& fun()
{
int i = 10;
return &i;
}
cc是局部变量 但是你返回的是cc不是cc的指针或引用
------解决方案--------------------
CC是函数内的局部变量,你一return堆就会释放内存,内部就木知是啥了,你完全可以把*dd当成输入输出参数,这样就不会有问题了。。。
------解决方案--------------------
不能返回局部变量的指针和返回局部变量本身是不同意义的。
------解决方案--------------------
例子里面返回的就是 a[]数组中对象的地址,当然没问题。。
#include<iostream>
using namespace std;
int *max(int *dd,int size);
int main()
{
int a[]={1,3,5,6,54,543,2,456,10};
cout<<"求最大值"<<endl;
cout<<*max(a,sizeof(a)/sizeof(int))<<endl;//此处还是对max的间接引用。
system("pause");
return 0;
}
int *max(int *dd,int size)
{
int *cc=dd;
for(int i=0;i<size;i++)
{
if(*cc<dd[i])
{
cc=&dd[i];
}
}
return cc;
}
虽编译正常,但看了“不能从函数中返回一个指向该函数局部自动变量的指针”“返回的指针所指向的数据不能够是函数内声明的变量”之类的话,返回函数内创建的cc是错了吗?教程中唯一的改动是将CC替换为了max,可max不也是函数内创建的吗?
------解决方案--------------------
不能返回局部变量的指针或引用 比如
const int& fun()
{
int i = 10;
return &i;
}
cc是局部变量 但是你返回的是cc不是cc的指针或引用
------解决方案--------------------
CC是函数内的局部变量,你一return堆就会释放内存,内部就木知是啥了,你完全可以把*dd当成输入输出参数,这样就不会有问题了。。。
------解决方案--------------------
不能返回局部变量的指针和返回局部变量本身是不同意义的。
------解决方案--------------------
例子里面返回的就是 a[]数组中对象的地址,当然没问题。。