c++-在函式中返回陣列的常用方法
阿新 • • 發佈:2018-12-19
一般應用情景:
在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;
}