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

2022-02-16 15:28:07 字數 5890 閱讀 1131

1樓:大野瘦子

#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"));

2樓:匿名使用者

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); //釋放記憶體}

3樓:心儀之友

你是要賦值還是返回?

4樓:接修

return()這個函式

c語言 怎麼返回一個陣列

5樓:自我西郊

你想返回一個陣列,因為你在一個函式內建立了陣列,屬於區域性變數,所以他在stack部分,而stack部分是用後類似於銷燬的,你返回的地址類似於一塊垃圾的地址,所以編譯警告。你要想返回函式內建立的陣列地址的話需要

//inside a function

這樣這個陣列建立在heap堆上,呼叫完函式還在,而你返回了那個堆上陣列的首地址,這樣就沒問題了。

用完free(array);

樓上用static不推薦,用static的話會在整個程式的run time執行時都佔用空間。而是用malloc,動態申請釋放更合理。

6樓:匿名使用者

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

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

7樓:home翼

不需要return返回,陣列操作的是地址,只要你在被調函式裡對陣列操作了,主函式裡的陣列也是會變得,把子函式的return部分去掉就可以了。。。。。指標也是呼叫地址的,一樣的,都不用返還值,都不用return

8樓:匿名使用者

好像,使用指標是不需要返回值return 的。 使用指標函式直接是形參與實參共用同一片記憶體空間,形參變化了,實參也就變化了。因此,直接使用 void函式就好。

9樓:匿名使用者

在定義陣列時,前面加上static,如:

static char str[100] ;

10樓:匿名使用者

函式返回一個int陣列:

int* array()

return a;

}你試試吧!!

11樓:風若遠去何人留

可以通過返回指標的方式返回陣列,不過需要注意:

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

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

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

1) 約定固定長度;

2) 以函式引數返回陣列長度;

3)將長度儲存在全域性變數中;

4)約定陣列結束標記;

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

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

12樓:匿名使用者

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

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

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

13樓:匿名使用者

可以,因為陣列名就是一個地址

14樓:天天天天天天天天天天天天天天天天天

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

15樓:此生我獨醉

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

16樓:匿名使用者

可以。char abc[10];

char * test()

17樓:天_涯明月

可以的:

//函式定義

int* f(int * a)

//呼叫

int b[10],a[10];

b=f(a);

18樓:異世血

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

19樓:匿名使用者

能啊 ,陣列的首地址

用c語言寫了一個輸入一個一維陣列的函式,如何在後來寫的函式中呼叫該陣列?

20樓:欽獨特

同樣的**為什麼我輸出的時候最後一個數字是亂碼呢

c語言怎麼向自定義函式中傳入一個陣列,處理完再返回新的陣列?

21樓:

//你**中定義的mymd5函式,你想返回decrypt陣列的首地址來獲取字串是無法實現的

//因為decrypt陣列是區域性變數,mymd5()函式返回後,這個陣列的記憶體空間也隨之被釋放

//了,但是可以通過向函式傳遞地址的方式來獲取加密後的字串,將其存放在字元陣列當中。

void mymd5(unsigned char *password, unsigned char *decrypt)

//定義字元陣列的同時進行置0初始化是編碼的一個好習慣

unsigned char password[20]=

unsigned char decrypt[16]=

...//呼叫函式

mymd5(password, decrypt);

22樓:

把陣列定義在主調函式中,把陣列的首地址(指標)傳給自定義函式,在函式中通過指標來操作主調函式中的陣列,結果自然就在主調函式中定義的陣列中。c沒有提供把陣列傳給函式再由函式傳回來的功能。只能上述那樣操作。

但可以間接達到你的目的,那就是把陣列安排在結構體中,結構體變數是可以在主調函式和被調函式間來回值傳遞的,自定義函式就得用結構體型別形式引數。

23樓:自我程式設計

看你的**。

你問題並不在陣列傳入。你函式mymd5接收password陣列,mymd5的password陣列變數和外部函式的password地址相同,所以改變其中外部函式的陣列也改變。

但你mymd5返回的陣列decrypt,是區域性變數,當mymd5呼叫結束,這個陣列的記憶體空間就釋放了。你接收了也是null。所以要用malloc或calloc申請動態記憶體。

這樣不會被釋放。

我寫了簡單案例,你參考:

#include

#include

#include

char *md(char a);//錯誤的陣列返回char *md2(char a);//正確的陣列返回int main()

char *md(char password)char *md2(char password)

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

int main i for i 0 i 這個要問數學老師才知道。c語言陣列問題 你的 問題有以下幾個 1 min和max沒有初始化 2 對於a min 和a max 沒有做迴圈參考 如下 include main printf 最大數是 d,下標是 d,最小數是 d,下標是 d n a max m...

c語言陣列的下標,C語言陣列的下標

樓主你好。注意a是常量,不要被別人誤導了。實際上a是陣列名代表陣列的首地址 注意雖然陣列名和指標都代表地址,但是陣列名不是指標,指標是變數,這個a是常量,可以叫指標常量 而i實際上可以看做陣列中的元素距離陣列首地址的偏移量 距離 a i 就是取距離陣列首元素距離為i的陣列中元素的值,也就是a i 了...

c語言,陣列名與陣列元素的關係,C語言,陣列名與陣列第一個元素的關係

主要有bai如下區別 1 數du組zhi名代表 陣列的首地址,若daoc abcdef 則陣列名c代表陣列元素內 a 的地址。2 s用於輸出一容個字串,對應的引數是陣列名 即陣列的首地址 輸出從陣列起始位置到陣列中第一個 0 之間的全部字元。2 c用於輸出一個字元,即字元的值。而陣列名是陣列的首地址...