1樓:匿名使用者
方法1:利用全域性變數
分析:全域性變數作為c語言的一個知識點,雖然我們都瞭解它的特點,但在實際教學過程中應用得並不是很多。由於全域性變數的作用域是從定義變數開始直到程式結束,而對於編寫有多個返回值的c語言函式,我們可以考慮把要返回的多個值定義成全域性變數。
當函式被呼叫時,全域性變數被更改,我們再把更改後的全域性變數值應用於主調函式中。函式被呼叫後被更改後的全域性變數值即為函式的數個返回值。下面以一個例項演示該方法的應用。
例項1:編寫函式求3個數中的最大值與最小值。
方法:把最大值、最小值分別定義成2個全域性變數max、min,在使用者自定義函式中把求出來的最大值與最小值分別賦給全域性變數max、min。函式呼叫完畢後全域性變數的max、min值即儲存了函式要求返回的值。
程式參考**如下:
#include "stdio.h"
#include "conio.h"
int max,min;/*定義兩個全域性變數用於儲存函式返回值*/
void max_min(int a,int b,int c) /*定義求最大最小值的函式*/
main()
除錯結果如下:
請輸入3個整數:
5,-6,2
三個數中的最大值為:5;最小值為:-6
注意:該方法雖然可以實現有多個返回值的函式,但由於全域性變數不能保證值的正確性(因為其作用域是全域性,所以程式範圍內都可以修改它的值,如果出現錯誤將非常難以發現),並且全域性變數增加了程式間模組的耦合,所以該方法要慎用。
方法2:傳遞陣列指標
分析:在教學過程中,我們知道c語言函式引數的傳遞方式有值傳遞與地址傳遞。當進行值傳遞時,主調函式把實參的值複製給形參,形參獲得從主調函式傳遞過來的值執行函式。
在值傳遞過程中被調函式引數值的更改不能導致實參值的更改。而如果是地址傳遞,由於傳遞過程中從實參傳遞過來的是地址,所以被調函式中形參值的更改會直接導致實參值的更改。因此,我們可以考慮把多個返回值作為陣列元素定義成一個陣列的形式,並使該陣列的地址作為函式的形式引數,以傳址方式傳遞陣列引數。
函式被呼叫後,形引數組元素改變導致實參改變,我們再從改變後的實引數組元素中獲得函式的多個返回值。以下例項演示該方法的應用。
例項2:編寫函式求一維整形陣列的最大值與最小值,並把最大值與最小值返回給主調函式。
方法:以指標方式傳遞該一維陣列的地址,然後把陣列的最大值與陣列的第一個元素交換,把陣列的最小值與最後一個元素交換。函式被呼叫完畢後,實引數組中的第一元素為陣列的最大值,實引數組中最後一個元素為陣列的最小值,從而實現返回陣列的最大值與最小值的功能。
程式參考**如下:
#include "stdio.h"
#include "conio.h"
void max_min(int *ptr,int n) /*定義求陣列最大值最小值的函式,傳遞陣列指標*/
if(*(ptr+n-1)>*(ptr+i))/*最小值與最後一個元素進行交換*/}}
/*呼叫最大最小值函式*/
main()
除錯結果如下:
請輸入6個整形數,以空格隔開:
5 8 9 32 -6 4
max=32,min=-6
注意:該方法適用於多個返回值的資料型別一致的情況。當返回值資料型別不一致時,不適用該方法
2樓:匿名使用者
同樣返回陣列地址,傳給char**指標,但是要動態分配的陣列,否則函式退出陣列記憶體就會被**。
如char** fun()
3樓:匿名使用者
首先返回整型陣列是返回陣列的首地址,要返回char*,實際是返回char,所謂指標陣列,我也不記得了,你可以看c和指標這本書
4樓:匿名使用者
指標陣列可以看做指標的指標:
#include
int a[3][2]=,,,};
int** ptrs()
void t_ptrs()
void main( )
5樓:匿名使用者
返回char型陣列首地址,而且你這種表示式,似乎是二維陣列了
6樓:歡樂多
首先,你要清楚你的陣列是在**建立的,如果是函式體內區域性變數,是無法返回的,因為馬上就會被釋放。
如果是函式體外傳進去的,根本不用返回,因為對陣列的任何修改都是直接操作的。
當然,最後就是在函式體內用malloc分配的陣列,這類就是可以返回的了(如果對你有意義的話,無意義就直接free掉)。
返回值就是指標。
如:int *func()
int **func()
7樓:系榆
返回的是陣列的首地址
c++中如何使函式返回陣列
8樓:啊哦
在c++中,陣列不是一種型別,因此不能被直接返回。一般有兩種方法來返回一個陣列。1.
返回一個指向陣列的指標
#include using namespace std; int* array() cout< 返回一個結構的形式。這種形式相對較安全,可以避免忘記釋放指標而造成記憶體洩露,也可以避免訪問懸掛指標造成的錯誤。但缺點是由於結構是先拷貝再返回,因此如果結構較大時,會影響效率和佔用較大記憶體。 #include using namespace std;class tagx;class tag array() cout< for(int i=0;i<10;i++){ 解釋如下 因為q宣告的是一個區域性變數,所以在函式呼叫結束後它所開闢的記憶體空間就會被系統收回 它裡面的內容也就銷燬了,因此它輸出的是一段亂碼!改下程式 include include include char t char copy char p,int m void main 輸出的是什麼?一起... 你的程式有問題,不是簡單的語句錯誤,你的思路錯了,你看一下你的程式根本就不是在找最大值的索引,而是在找第一次出現數字變小的那個數字的索引,這樣說有點模糊,舉幾個例子,來說明一下你的程式是在幹什麼。例如,你要是搜尋序列1,2,3,1,4,5,6那麼會返回2,因為第二個數字 也就是3 開始第一次下降,因... 如 有一函式 void fun void 這是fun函式的宣告fun 這是fun函式的呼叫 fun 當只是函式的名字的時候就代表著函式入口的地址這樣,我們可以通過定義一個指標,然後使這個指標指向函式的入口,這樣,我麼就可以間接呼叫函式了。具體例子 int main void fun int a 因為...糾錯 c語言 函式返回指標問題
C語言上的問題編寫函式,返回double陣列中儲存的
c 的函式指標怎麼寫