這個問題屬於非常初級的問題,但是對於初學不知道的人可能會比較頭疼。c++中函式是不能直接返回乙個陣列的,但是陣列其實就是指標,所以可以讓函式返回指標來實現。比如乙個矩陣相乘的函式,很容易地我們就寫成:
1但是執行後發現結果是:1.75 1.75#include
<
iostream
>23
using
namespace
std;45
float
*multmatrix(
floata[4
], floatb[4
])61516
intmain()17;
19floatb[4
] =;20
float*m
=multmatrix(a, b);
21cout
<
] <
<
] <<
endl;
22cout
<
] <
<
] <<
endl;
2324
return0;
25}
6.51468e-039 3.76489e-039
根本不是想要的結果。於是我們在函式中也加上顯示**,看看是不是計算的問題,得到結果:
1.75 1.75
0 01.75 1.75
1.96875 1.75
發現計算的結果是正確的,但返回後就變了,而且跟上次的結果不一樣。這是為什麼呢?
因為在函式中定義的陣列m在函式執行完後已經被系統釋放掉了,所以在呼叫函式中得到的結果當然不是計算後的結果。有乙個解決辦法就是動態分配記憶體,在函式中new乙個陣列,這樣就不會被釋放掉了。
於是就應該將 7
float
m[4];
改為:7 float *m = new float[4];
修改執行後得到結果:
1.75 1.75
0 01.75 1.75
0 0正確。但是我們這樣並沒有將自己申請的空間釋放掉,如果我們在函式內釋放的話結果就會跟開始時的一樣了。
看看我們的呼叫**: 20
float*m
=multmatrix(a, b);
這樣其實是將m指標指向了函式中m陣列的首位址,我們可以將m指標釋放,效果和釋放申請的m陣列是一樣的,因為它們指向的是同一片記憶體空間。於是**就修改為:
1執行結果:#include
<
iostream
>23
using
namespace
std;45
float
*multmatrix(
floata[4
], floatb[4
])61718
intmain()19;
21floatb[4
] =;22
float*m
=multmatrix(a, b);
23cout
<
] <
<
] <<
endl;
24cout
<
] <
<
] <<
endl;
25delete m;
2627
return0;
28}
1.75 1.75
0 01.75 1.75
0 0沒有問題,new的空間也delete掉了。
鑑於下面大牛們的建議,我將程式修改如下,大家看可否:
1至於陣列類和智慧型智慧型我還需要繼續學習,多謝大家關注!#include
<
iostream
>23
using
namespace
std;45
void
multmatrix(
floatm[4
], floata[4
], floatb[4
])61516
intmain()17;
19floatb[4
] =;20
21float*m
=new
float[4
];22
multmatrix(m, a, b);
2324
cout
<
] <
<
] <<
endl;
25cout
<
] <
<
] <<
endl;
26delete m;
2728
return0;
29}
c 怎樣讓函式返回陣列
這個問題屬於非常初級的問題,但是對於初學不知道的人可能會比較頭疼。c 中函式是不能直接返回乙個陣列的,但是陣列其實就是指標,所以可以讓函式返回指標來實現。比如乙個矩陣相乘的函式,很容易地我們就寫成 1 include 2 3 using namespace std 4 5 void multmatr...
c 函式返回陣列
c 語言 不允許返回乙個完整的陣列作為函式的引數 但是,您 可以通過指定不帶索引的陣列名來返回乙個指向陣列的指標 我們將在下一章中講解有關指標的知識,您可以先跳過本章,等了解了 c 指標的概念之後,再來學習本章的內容。如果您想要從函式返回乙個一維陣列,您必須宣告乙個返回指標的函式,如下 int my...
C 函式返回陣列
int getnewarray 或者採用static定義指標變數 在陣列p count 前面加入了static關鍵字,它就使得p count 存放在記憶體中的靜態儲存區中,所占用的儲存單元不釋放直到整個程式執行結束 for int i 0 i count i printf n for int i 0...