c++-在函数中返回数组的常用方法
一般应用情景:
在fun1函数中处理完某个数组之后,返回此数组到另一个函数中。
方法:
-
使用全局变量:这种方法最方便,但此方法打破了函数间的通信及封装的思想,所以不推荐使用。
比较简单,就不举例了;
-
通过堆区动态开辟内存解决:C++中,我们通常用new来在堆区动态开辟内存,利用堆区“现用现开辟,用完手动收回”特点,实现灵活管理。是实际开发中的常用办法。
动态开辟空间在堆区,手动开辟,手动释放。
用new开辟
用delete释放
#include "pch.h"
#include<iostream>
using namespace std;
char* fun(char name[]) {
char *dir;
dir = new char[50];
cout << "请输入图片存放路径: " << endl;
cin >> dir;
int k = 0;
int nlen = strlen(name);
int dlen = strlen(dir);
for (int j = 0; j < nlen; j++) {
dir[dlen] = name[j];
dlen += 1;
}
dir[dlen] = '\0';
return dir;
}
int main() {
char *path;
char name[] = "1.txt";
path = fun(name);
cout << "path: " << path;
delete path;
return 0;
}
- 由调用方传入数组指针:此种方法不需要函数返回地址,而是在调用时直接传入数组地址,委托被调用方进行操作,由于此局部变量属于调用方本身,故即便被调用方结束内存释放,也不会被影响到该数组。
#include "pch.h"
#include<iostream>
using namespace std;
void fun(char name[],char path[]) {
cout << "请输入图片存放路径: " << endl;
cin >> path;
int k = 0;
int nlen = strlen(name);
int dlen = strlen(path);
for (int j = 0; j < nlen; j++) {
path[dlen] = name[j];
dlen += 1;
}
path[dlen] = '\0';
}
int main() {
char path[50] ="\0";
//cout << path << endl; 输出空行
char name[] = "1.txt";
fun(name,path);
cout << "path: " << path;
return 0;
}