返回指针值的函数怎么返回一个局部变量或者函数内部分配的地址?4
发布网友
发布时间:2024-02-23 17:06
我来回答
共5个回答
热心网友
时间:2024-08-06 15:41
在返回的时候局部变量将它复制给另一在全局的变量,所以它本身是销毁了,可是他复制的并没有销毁,而你所问的是返回的是const int& 是说她是一个常引用,即返回值不能被改变而且是一个变量的别名,而此题sum是局部变量,不是什么局部变量的引用。类似于:
#include <iostream>
using namespace std;
const int& get(const int x ){
int sum = x;
sum++;
return sum;
}
int main(){
cout<<get(5)<<endl;
}
若你改变该函数,把sum变作引用,改写函数,则返回sum就报错了。
热心网友
时间:2024-08-06 15:34
局部变量理论说是不能返回的,但在大多数编译器中是可以返回的,要不return就没用了。
局部变量不一定一离开作用域就释放了,系统有可能在某个特定时刻批量的释放内存。
还有,你应该有个变量接收返回值的,比如float* p=FindRow(...),返回值存入p中,局部变量就完成任务了。
热心网友
时间:2024-08-06 15:38
#include "stdio.h"
#include "string.h" //这里记得要引用这个库,这是strcpy的头文件
char* GetFileName()
{
char filename[20] = "file_0001.dat"; //这块不能用filename[],
//没有这种类型,那种形式只能做为函数参数来使用,不能用在变量声明
//这里声明的filename是一个局部变量,退出函数时将被编译器收回分配的空间
strcpy(filename,"file_xxxx");
return filename; //由于filename是一个局部变量,退出函数时将被编译器收回分配的空间
} //所以返回的时候将失败
void main()
{
char* s;
s = GetFileName();
printf("%s\n", s);
}
如果想返回一个有效的地址,那么就用malloc吧
#include "stdio.h"
#include "string.h" //这里记得要引用这个库,这是strcpy的头文件
#include "stdlib.h"
char* GetFileName()
{
char *filename = (char*)malloc(20); //这里用的是malloc动态分配的地址.这样退出函数时将不会收走指针
strcpy(filename,"file_xxxx");
return filename;//这时filename是动态分配的地址,所以退出函数时不会被收回空间
}
void main()
{
char* s;
s = GetFileName();
printf("%s\n", s);
free(s);//用完指针记得收回
}
热心网友
时间:2024-08-06 15:40
静态分配空间使用后再释放
热心网友
时间:2024-08-06 15:39
可以new一个指针,然后返回,不过得手动释放指针。