c語言如何返回陣列,c語言如何返回一個陣列?

2022-02-25 21:41:09 字數 6006 閱讀 9799

1樓:江微蘭萬卿

只能返回一個數,陣列不能返回,以陣列為函式引數傳給形參時,由於是陣列名傳遞(地址傳遞),實參和形參共用一段記憶體,對形參更改時實參的值也會改變,所以不需要返回值

2樓:蕭竣閏

return amounts;

你返回的是地址,所以函式型別應該是指標型的才能返回。

即 * extend

3樓:善護

double extend(double prices, double quantities)

return amounts; //棧中區域性變數,返回後其記憶體為垃圾值

}改成:

double *extend(double,double);

int main();

double quantity = ;

//double amount[10];

double *amount;

int i;

amount = extend(price,quantity);

for (i = 0; i < 10; i++)delete amount; //釋放記憶體printf("\n");

return 0;

}double *extend(double prices, double quantities)

return amounts; //可以返回指標}}

4樓:

#include

#include

double extend(double,double,double *p);

int main()

;double quantity = ;

double amount[10];

int i;

int j = extend(price,quantity, amount);

for (i = 0; i < j; i++)printf("\n");

return 0;

}//傳入要返回的陣列名,函式返回陣列的大小int extend(double prices, double quantities,double *p)

return i;}

5樓:地獄的冷槍

你這個程式有好多問題。

第一你呼叫extend函式的時候沒有變數接收它的返回值第二,如果你想返回一個陣列,只能返回陣列的地址。

double * extend()

c語言呼叫陣列返回陣列怎麼做?

6樓:大野瘦子

#include

#define min(x,y)

int * add_1();

main()

for(i=0;i<5;i++)

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

int * add_1()

int static a[5]=;

return a;

注意事項

一、該陣列不能是返回函式的區域性變數陣列,因為區域性變數陣列在退出函式後會被釋放。

可以是全域性變數,靜態區域性變數,動態分配記憶體,以及從函式引數傳過來的陣列地址。

二、返回指標時,無法返回長度,所以需要其它方式傳回陣列長度,以下是幾種常用的方法。

1、約定固定長度。

2、以函式引數返回陣列長度。

3、將長度儲存在全域性變數中。

4、約定陣列結束標記。

5、在陣列中儲存陣列長度,如存在第一個元素中。

有些時候需要子函式將一個陣列返回出來,通常是兩種方法,一種是靠指標,另一種是結構體。

例如指標:

#include

char *test(char *tmp)

return tmp;

void main(void)

printf("%s",test("第一個測試例子\n"));

7樓:匿名使用者

c語言呼叫陣列返回陣列可用兩種形式實現:

1、通過引數返回陣列

void add_1( int a, int n, int b ),b[5];

int *pb;

int i;

add_1( a, 5, b );

for( i=0;i<5;i++ )

printf("%d: %d\n", a[i], b[i] );

pb=add_2( a, 5 );

for( i=0;i<5;i++ )

printf("%d: %d\n", a[i], pb[i] ); //pb就可以按陣列使用

free(pb); //釋放記憶體}

8樓:心儀之友

你是要賦值還是返回?

9樓:接修

return()這個函式

c語言中怎樣返回一個陣列?

10樓:風若遠去何人留

在c語言中,無法直接返回一個陣列,但是可以通過返回對應型別指標的方式,返回陣列。

在大多數情況下,一維陣列和一維指標是可以通用的。

比如,定義一個函式,申請一定長度的整型動態陣列,其長度用引數傳入,並將結果返回。如出錯,返回空指標null。 **可以寫成如下形式:

int *int_array_create(int n)//引數n為陣列元素個數

11樓:匿名使用者

只能返回一個數,陣列不能返回,以陣列為函式引數傳給形參時,由於是陣列名傳遞(地址傳遞),實參和形參共用一段記憶體,對形參更改時實參的值也會改變,所以不需要返回值

12樓:匿名使用者

動態分配一塊記憶體,返回指標。

或者呼叫函式之前分配好記憶體,將指標傳遞給函式,通過指標,將陣列寫入,比較推薦這種方法。

或者通過全域性變數 。

13樓:兵兵老師

可以定義一個指向陣列的指標或者定義一個指標陣列。。。

14樓:匿名使用者

陣列不用返回吧,它一般會自動返回的!

c語言怎麼返回字串陣列?

15樓:風若遠去何人留

c語言返回值不支援返回陣列,不過可以通過返回指標型別,用以替代陣列。在c語言中,陣列大多數時候是可以用指標替代的。

不過需要注意的是,不能夠返回在函式內部定義的區域性變數陣列,因為一旦函式退出,區域性變數就會被釋放,導致陣列指標無效。

可以返回以下幾種:

1 全域性變數,或者全域性變數空間內的一個地址。

2 靜態區域性變數,或者靜態區域性變數內部的一個地址。

3 從引數傳入的陣列/指標變數,或者在其上做的合法偏移。

4 在陣列內部動態申請的空間首地址。

16樓:匿名使用者

1、在void strcat()的strcat前新增*,表示返回char 指標。

2、strcat()應該返回str1,即 return str1。str1是連線的結果,呼叫者有責任確保str1陣列空間足夠大,以便在其尾部新增str2後,不會覆蓋其他資料空間。

17樓:

char* strcatf(char str1,char str2) //想放回字串陣列的話,就返回首地址。

18樓:匿名使用者

char * strcatf(char str1,char str2)

加一個*號即可,返回的就是指標型別

c語言中如何使返回值為陣列

19樓:

int merge1 (int b[ ], int b1[ ], int s, int m, int t )改成int *merge1 (int b[ ], int b1[ ], int s, int m, int t )

就是int 後面加*,這樣就可以了

20樓:匿名使用者

函式返回值一般為一個值,現在你要返回陣列,那麼你可以在程式中定義全域性陣列,或者你通過傳指標的方式傳過來陣列引數,在函式中更改了陣列的值後又把陣列首地址返回去就可以用了。

21樓:鷹弈

這是傳址,不需要返回

void merge1 (int b[ ], int b1[ ], int s, int m, int t )

while (i<=m) b1[k++]=b[i++]; //前一個子序列剩下的

while (j<=t) b1[k++]=b[j++]; //後一個子序列剩下的}

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

22樓:匿名使用者

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

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

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

c語言如何給一堆陣列整體賦值,C語言如何給一堆陣列整體賦值

你只須給至少一個賦0值就行了。如 int a 1000 或int a 1000 因為如果有至少一個賦值的話,編譯器就會給那些沒有給定值的預設初始值。int a 全是0 我用gcc可以 int a 前面有人說tc不行,我不知道 如果要賦其他值我就知道用迴圈 用for迴圈把個個元素賦值,不過 c語言如何...

C語言陣列問題,c語言陣列宣告問題

for i 1 i 10 i break 要求按已排好的順序規律將它插入到陣列中.這段改為 for i 1 i 10 i a i 1 m break 你確定是從大到小排列嗎?我怎麼感覺你的程式是從小到大排列的啊。include void main 從鍵盤接收10個數。for j 1 j 10 j f...

c語言中如何依次輸入陣列中元素,C語言中如何依次輸入陣列中元素

include int main int a 17 int i for i 0 i 17 i scanf d a i return 0 函式功能 把格式化的資料寫入某個字串 函式原型 int sprintf char buffer,const char format argument 返回值 字串長...