c語言中,整個陣列可以作為函式的返回值嗎

2021-12-22 19:25:16 字數 3984 閱讀 9140

1樓:匿名使用者

要知道,在c語言中返回值都是唯一的乙個值,所以說整個陣列的各個元素值是不可以一次性作為返回值的,但是通常為了返回乙個陣列,我們用的是返回這個陣列的首位址這種方法。

2樓:

你好,返回陣列名返回的只能夠是陣列在記憶體空間中的首位址位置

建議樓主可以建立全域性陣列,這樣就可以在區域性函式中修改陣列的值了

有不懂的可以追問~

3樓:

不行,c++中 陣列和列舉都是不可以作為函式的返回型別來返回的,假如您想要實現返回陣列,您可以宣告乙個結構,裡面包含陣列或者列舉型別,然後返貨這個結構型別或者指標

曾經有本很經典的書就笑談到(貌似是《c++primer puls》):c和c++不允許返回陣列卻可以返貨帶陣列的結構體,這不是自己打自己巴掌麼...

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樓:匿名使用者

可以,因為陣列名就是乙個位址

6樓:天天天天天天天天天天天天天天天天天

能返回這個陣列的首位址,但是不能返回陣列的大小

7樓:此生我獨醉

你把這個陣列定義為全域性變數,然後就能在各個函式中操作,也相當於從函式中返回,或者就是使用指標,和大家說的一樣

8樓:匿名使用者

可以。char abc[10];

char * test()

9樓:天_涯明月

可以的:

//函式定義

int* f(int * a)

//呼叫

int b[10],a[10];

b=f(a);

10樓:異世血

可以的,一般是返回首位址。

11樓:匿名使用者

能啊 ,陣列的首位址

關於c語言中陣列作為函式引數的函式之間呼叫問題

12樓:肥仙女

1、新建乙個陣列作為引數專案,如圖所示:

2、新增乙個array.c檔案,如圖所示:

3、包含stdio.h和stdlib.h標頭檔案,如圖所示:

4、輸入main函式主體及返回值,如圖所示:

5、定義乙個陣列arr,如圖所示:

6、定義乙個function函式,如圖所示:

7、將陣列作為引數傳遞給function函式,如圖所示:

8、執行程式,輸出結果,如圖所示:

13樓:董音廣子珍

這問題說明你對指標的運用還是不熟練的,既然是陣列,作為函式引數傳遞的是陣列首位址.

#include

#include

void

func1(int

*array,

intsize)

}//陣列array_b根據陣列array_a的元素乘以項數獲得元素值

void

func2(int

*array_a,int

*array_b,

intsize)

//輸出陣列元素

void

print(int

*array,

intsize)

intmain(void)

14樓:匿名使用者

函式在陣列中的呼叫是以陣列名為實參呼叫的,因為陣列名就是陣列的首位址,所以說對陣列的呼叫是不需要返回值的,主調函式裡面的陣列值會隨被調函式的形引數組改變而改變,當然這些都是在你以陣列名作為實參的前提下

15樓:駭客之劍

如果傳遞值是指標(位址),也就是陣列名,雖然在子函式裡面,但複製過去的是位址,所以可以對位址裡面指向的內容進行操作,也就是乙個子函式中可以實現對多個值的操作,如果傳遞的是內容,則至多通過return 進行乙個返回值操作,總之,要看你傳什麼

16樓:匿名使用者

nt *&pvec是c++中的指向int型別指標的引用,就是pvec本身是對函式呼叫時實參的乙個引用,而這個實參的型別是乙個指向整形的指標型別,之所以使用引用,是因為要在函式中修改這個指標的內容。(如果只需要修改指標指向的記憶體單元的內容,只需要用指標型別作為形參就可以)

int &size 中size同樣是乙個引用,是指向int型別的乙個引用,目的同樣是修改引用的實參的值。

fstream在c++中是乙個檔案流型別,可以讀取也可以寫入,fstream&可以傳入乙個fstream型別的物件,在函式中的目的同樣是修改原有實參的內容,引用不會對實參進行拷貝。

c語言中,陣列元素的下標下限為,c語言中陣列元素下標的上下限是什麼?

c語言中,陣列元素的下標下限為0。陣列中的各元素的儲存是有先後順序的,它們在記憶體中按照這個先後順序連續存放在一起。陣列元素用整個陣列的名字和它自己在陣列中的順序位置來表示。例如,a 0 表示名字為a的陣列中的第乙個元素,a 1 代表陣列a的第二個元素,以此類推。對於vb的陣列,表示陣列元素時應注意...

C語言中的log函式是怎麼意思,C語言中log函式怎麼使用啊

1 c語言中,有兩個log函式,分別為log10和log函式,具體用法如下 2 函式名 log10 功 能 對數函式log,以10為底 用 法 double log10 double x 程式示例 include include int main void 執行結果 3 函式名 log 功 能 對數...

關於c語言二維陣列的問題,C語言中二維陣列的定義問題

a是乙個一維陣列,陣列裡的值是指標,指向的還是一維陣列。即等價於,int x 2 2,0 int y 2 4,8 int a 2 x,y 我想你應該知道答案了。c語言中二維陣列的定義問題 正確寫法如下 char fd jgf1 maxitemlen 1 說明 把null去掉 1.二維陣列的第乙個維度...