c語言返回數(shù)組函數(shù)類型 c語言函數(shù)返回值可以是數(shù)組嗎

c語言函數(shù)返回數(shù)組

你好!

創(chuàng)新互聯(lián)是一家集網站建設,漢中企業(yè)網站建設,漢中品牌網站建設,網站定制,漢中網站建設報價,網絡營銷,網絡優(yōu)化,漢中網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。

將函數(shù)采用指針的形式返回平均值

注意看后面的注釋

#includestdio.h

int?main()

{

float?*student_aver(float?array[3][3]);???//?改成指針的形式輸出?

float?score[3][3];

float?*a;

int?i,j;

printf("請輸入學生各科的成績:");

for(i=0;i3;i++)

for(j=0;j3;j++)

scanf("%f",score[i][j]);

printf("每個學生的平均成績分別為:");

a=student_aver(score);????????????????//?指針?a?接收函數(shù)的返回值?

for(i=0;i3;i++)??????????????????????//?打印出平均值?

printf("%.2f?",a[i]);

return?0;

}

float?*student_aver(float?array[3][3])????//?改成指針的形式輸出

{

int?i,j;

float?sum,a[3];

for(i=0;i3;i++)

{

sum=0;

for(j=0;j3;j++)

sum=sum+array[i][j];

a[i]=sum/3;

???}

return?a;?????????????????????????????//?輸出數(shù)組?a?

}

C語言中有沒有返回數(shù)組類型的函數(shù)?

看來你是還沒有理解數(shù)組的概念,數(shù)組名實際上就是指向該數(shù)組第一個元素的指針,比如說:

int

array[3]={1,2,3}的一個數(shù)組,這里的array實際上是一個指針,指向了這個數(shù)組的第一個元素。這時候你的*array

=

1,*(array

+

1)

=2,*(array

+

2)

=

3。

這時候你應該知道,所謂的返回數(shù)組和返回指針實際上是一個概念。

int

*

retInt()

{

int

array[3]={1,2,3};

return

array;

}

實際上就是返回了一個數(shù)組。你的最后一個問題,指定數(shù)組類型,實際上只要指定指針類型就可以了。

還有一種方法就是樓上的兄弟說的了,定義一個新的數(shù)據(jù)類型存放數(shù)組,函數(shù)返回該數(shù)據(jù)類型也就相當于返回了一個數(shù)組。

(上面的函數(shù)中數(shù)組有作用域問題,僅做說明使用。)

c語言自定義的函數(shù)如何返回一個數(shù)組

方法1:利用全局變量

分析:全局變量作為C語言的一個知識點,雖然我們都了解它的特點,但在實際教學過程中應用得并不是很多。由于全局變量的作用域是從定義變量開始直到程序結束,而對于編寫有多個返回值的C語言函數(shù),我們可以考慮把要返回的多個值定義成全局變量。當函數(shù)被調用時,全局變量被更改,我們再把更改后的全局變量值應用于主調函數(shù)中。函數(shù)被調用后被更改后的全局變量值即為函數(shù)的數(shù)個返回值。下面以一個實例演示該方法的應用。

實例1:編寫函數(shù)求3個數(shù)中的最大值與最小值。

方法:把最大值、最小值分別定義成2個全局變量max、min,在用戶自定義函數(shù)中把求出來的最大值與最小值分別賦給全局變量max、min。函數(shù)調用完畢后全局變量的max、min值即保存了函數(shù)要求返回的值。程序參考代碼如下:

#include "stdio.h"

#include "conio.h"

int max,min;/*定義兩個全局變量用于保存函數(shù)返回值*/

void max_min(int a,int b,int c) /*定義求最大最小值的函數(shù)*/

{max=min=a; /*初始化最大最小值*/

if(max if(max if(minb)min=b;

if(minc)min=c;

}

main()

{int x,y,z;

printf(" 請輸入3個整數(shù):\n");

scanf("%d,%d,%d",x,y,z);

max_min(x,y,z) ;/*調用求最大值與最小值的函數(shù)*/

printf("三個數(shù)中的最大值為:%d;最小值為:%d",max,min);/*輸出最大值與最小值*/

getch();

}

調試結果如下:

請輸入3個整數(shù):

5,-6,2

三個數(shù)中的最大值為:5;最小值為:-6

注意:該方法雖然可以實現(xiàn)有多個返回值的函數(shù),但由于全局變量不能保證值的正確性(因為其作用域是全局,所以程序范圍內都可以修改它的值,如果出現(xiàn)錯誤將非常難以發(fā)現(xiàn)),并且全局變量增加了程序間模塊的耦合,所以該方法要慎用。

 方法2:傳遞數(shù)組指針

分析:在教學過程中,我們知道C語言函數(shù)參數(shù)的傳遞方式有值傳遞與地址傳遞。當進行值傳遞時,主調函數(shù)把實參的值復制給形參,形參獲得從主調函數(shù)傳遞過來的值運行函數(shù)。在值傳遞過程中被調函數(shù)參數(shù)值的更改不能導致實參值的更改。而如果是地址傳遞,由于傳遞過程中從實參傳遞過來的是地址,所以被調函數(shù)中形參值的更改會直接導致實參值的更改。因此,我們可以考慮把多個返回值作為數(shù)組元素定義成一個數(shù)組的形式,并使該數(shù)組的地址作為函數(shù)的形式參數(shù),以傳址方式傳遞數(shù)組參數(shù)。函數(shù)被調用后,形參數(shù)組元素改變導致實參改變,我們再從改變后的實參數(shù)組元素中獲得函數(shù)的多個返回值。以下實例演示該方法的應用。

實例2:編寫函數(shù)求一維整形數(shù)組的最大值與最小值,并把最大值與最小值返回給主調函數(shù)。

方法:以指針方式傳遞該一維數(shù)組的地址,然后把數(shù)組的最大值與數(shù)組的第一個元素交換,把數(shù)組的最小值與最后一個元素交換。函數(shù)被調用完畢后,實參數(shù)組中的第一元素為數(shù)組的最大值,實參數(shù)組中最后一個元素為數(shù)組的最小值,從而實現(xiàn)返回數(shù)組的最大值與最小值的功能。程序參考代碼如下:

#include "stdio.h"

#include "conio.h"

void max_min(int *ptr,int n) /*定義求數(shù)組最大值最小值的函數(shù),傳遞數(shù)組指針*/

{int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/

int *temp;/*用于交換位置*/

*temp=*ptr;

for(i=0;i{

if(*ptr*(ptr+i))/*最大值與第一個元素進行交換*/

{

k=i;

*temp=*ptr;

*ptr=*(ptr+k);

*(ptr+k)=*temp ;

}

if(*(ptr+n-1)*(ptr+i))/*最小值與最后一個元素進行交換*/

{

j=i;

*temp =*(ptr+n-1);

*(ptr+n-1)=*(ptr+j);

*(ptr+j)= *temp ;}

}

}

/*調用最大最小值函數(shù)*/

main()

{

int A[6],i;

for(i=0;i6;i++)

scanf("%d",A[i]);

max_min(A,6);

printf("max=%d, min=%d\n \n",A[0],A[5]);

getch();

}

調試結果如下:

請輸入6個整形數(shù),以空格隔開:

5 8 9 32 -6 4

max=32,min=-6

注意:該方法適用于多個返回值的數(shù)據(jù)類型一致的情況。當返回值數(shù)據(jù)類型不一致時,不適用該方法。

c語言函數(shù)返回數(shù)組?

在C語言中,無法直接返回一個數(shù)組,但是可以通過返回對應類型指針的方式,返回數(shù)組。

在大多數(shù)情況下,一維數(shù)組和一維指針是可以通用的。

比如,定義一個函數(shù),申請一定長度的整型動態(tài)數(shù)組,其長度用參數(shù)傳入,并將結果返回。如出錯,返回空指針NULL。 代碼可以寫成如下形式:

int?*int_array_create(int?n)//參數(shù)n為數(shù)組元素個數(shù)

{

int?*r;?

if(n=0)?return?NULL;//參數(shù)錯誤

r?=?(int?*)malloc(sizeof(int)*n);//申請內存空間,大小為n個int長度。

return?r;//返回得到的整型數(shù)組的指針。?

}

C語言函數(shù)中返回數(shù)組

你的程序:

main()

{

int b[3];

b=pop();

}

int * pop()

{

int a[3],i;//定義的局部變量a[3]在調用完之后自動釋放其空間

for(i=0;i3;i++)

a[i]=i;

return a;//返回的是指向數(shù)組a[3]的地址而不是數(shù)組a[3]本身

}

注:既然上面說到調用的方法返回的是指向數(shù)組a[3]的地址,所以主函數(shù)中b接收的應該是指向數(shù)組a[3]的地址,而數(shù)組a[3]在方法調用完后又被釋放了,所以b接收不到數(shù)組a[3],故出錯。

正確的程序:

#includestdio.h

main()

{

int b[3];

pop(b,3);

}

void pop(int a[],int n)//該方法傳入兩個參數(shù),第一個是傳入指向數(shù)組的地址,第二個參數(shù)是傳入數(shù)組的長度,不需寫返回語句return,只需通過指向數(shù)組的地址的傳入就可以直接將數(shù)組b[]的值改變

{

int i;

for(i=0;in;i++)

a[i]=i;

}

C語言調用數(shù)組返回數(shù)組怎么做?

#include stdio.h

#define MIN(x,y)

int * add_1();

main()

{

int * p = add_1();

int b[5];

for(int i=0;i5;i++)

{

b[i] = *(p+i);

}

for(i=0;i5;i++)

{

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

}

}

int * add_1()

{

int static a[5]={1,2,3,4,5};

return a;

}

擴展資料:

注意事項

一、該數(shù)組不能是返回函數(shù)的局部變量數(shù)組,因為局部變量數(shù)組在退出函數(shù)后會被釋放。

可以是全局變量,靜態(tài)局部變量,動態(tài)分配內存,以及從函數(shù)參數(shù)傳過來的數(shù)組地址。

二、返回指針時,無法返回長度,所以需要其它方式傳回數(shù)組長度,以下是幾種常用的方法。

1、約定固定長度。

2、以函數(shù)參數(shù)返回數(shù)組長度。

3、將長度保存在全局變量中。

4、約定數(shù)組結束標記。

5、在數(shù)組中存儲數(shù)組長度,如存在第一個元素中。

有些時候需要子函數(shù)將一個數(shù)組返回出來,通常是兩種方法,一種是靠指針,另一種是結構體。

例如指針:

#include stdio.h

char *test(char *tmp)

{

return tmp;

}

void main(void)

{

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

}

文章題目:c語言返回數(shù)組函數(shù)類型 c語言函數(shù)返回值可以是數(shù)組嗎
瀏覽路徑:http://muchs.cn/article4/docosoe.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站收錄、外貿建站、定制開發(fā)響應式網站、面包屑導航、企業(yè)網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化