c語言自定義函式返回陣列的問題,C語言自定義函式返回一個陣列的問題

2021-07-25 23:44:17 字數 5747 閱讀 5672

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樓:

你就別指望了,那是不允許的,也是不可能的。因為函式中的陣列在函式返回後就不再受你的**控制了,不僅可能得不到正確資料,而且有安全問題。不過你可以在函式中用動態法建立陣列,最後把陣列指標返回,在主調函式中使用。

使用完之後別忘了釋放那個陣列。

3樓:匿名使用者

按照你的思路以及你給出的**,編寫了如下的程式,請參考。

#include

void sort(int x,int n) /*排序函式,x為傳入的陣列名,n表示陣列下標數值*/} }

return;

}int main()

,i,n;

n=3;

sort(a,n);

for(i=0;i

printf("%d ",a[i]);}

c語言自定義的函式如何返回一個陣列

4樓:雙槍老椰子

方法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

注意:該方法適用於多個返回值的資料型別一致的情況。當返回值資料型別不一致時,不適用該方法。

5樓:好事之村中少年

可以返回你想返回陣列的頭指標, 除了這個還需要注意一點,因為你c是在子函式裡宣告的 當函式執行完 c陣列的會被釋放,建議動態分配記憶體給c然後在返回指標就行了

6樓:匿名使用者

#include

main()

float change(float array[3][3]) // 這裡可以寫出 array[3]

7樓:朱古力兜

#include

int main()

void change(int array[3])用陣列指標完成

c語言中函式能返回一個陣列嗎

8樓:匿名使用者

不能直接返回一個陣列,但是可以用其他方式實現類似功能。

方法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

注意:該方法適用於多個返回值的資料型別一致的情況。當返回值資料型別不一致時,不適用該方法

jquery自定義函式問題,和js自定義函式的區別

自定義函式就是你自己寫一個函式,然後呼叫它就可以了function a id 在jquery裡面怎麼寫自定義函式 你可以寫一個函式自呼叫方法,function 在這裡面寫方法,就自己呼叫了,想要把握呼叫的時機,可以直接用你的那種方法,在你想呼叫的地方這樣寫就ok了,getnowtime 關鍵是你的自...

求c語言自定義函式並求數的絕對值

include float getabs float in return in int main int myabs int x c語言中有沒有求絕對值的函式啊?謝謝 有。c語言求絕對值的函式為abs x 與fbs x abs x 包含於stdlib.h,且兩者均包含於math標頭檔案之下。1 ab...

excel VBA自定義函式如何進行陣列計算

function f myrange as range dim myarr 1 to 5 dim myr as range dim i as single i 1 for each myr in myrangemyarr i myr.value i i 1 next f myarr 1 myarr ...