C 之旅《怎樣讓函式返回陣列》

2021-07-06 08:27:23 字數 2410 閱讀 4814

這個問題屬於非常初級的問題,但是對於初學不知道的人可能會比較頭疼。c++中函式是不能直接返回乙個陣列的,但是陣列其實就是指標,所以可以讓函式返回指標來實現。比如乙個矩陣相乘的函式,很容易地我們就寫成:

1

#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}

但是執行後發現結果是:1.75 1.75

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...