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

C語(yǔ)言中函數(shù)的返回值可不可以是數(shù)組,如果可以應(yīng)該怎么設(shè)置參數(shù)?請(qǐng)高手回答?。?!

可以的,用指針做返回值

十年的管城網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整管城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“管城網(wǎng)站設(shè)計(jì)”,“管城網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

int * array(int *a){

for(i=0;i10;i++){

a[i]++;

}

return a;

}

main(){

int *p,i;

int a[10]={1,2,3,4,5,6,7,8,9,0};

p=array();

for(i=0;i10;i++){

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

}

}

運(yùn)行后數(shù)組各值加1

c語(yǔ)言中如何使返回值為數(shù)組

函數(shù)返回值一般為一個(gè)值,現(xiàn)在你要返回?cái)?shù)組,那么你可以在程序中定義全局?jǐn)?shù)組,或者你通過(guò)傳指針的方式傳過(guò)來(lái)數(shù)組參數(shù),在函數(shù)中更改了數(shù)組的值后又把數(shù)組首地址返回去就可以用了。

c語(yǔ)言中函數(shù)返回值可以是數(shù)組、字符串和結(jié)構(gòu)體嗎?

//語(yǔ)法編碼規(guī)則的角度看

ANSI C語(yǔ)言標(biāo)準(zhǔn),明確規(guī)定 數(shù)組類型和函數(shù)類型不可以做為返回值。

解決這種返回值的方法是通過(guò)指針來(lái)間接返回,即使用數(shù)組指針和函數(shù)指針。這可以做為c語(yǔ)言引入指針的另一個(gè)理由。

結(jié)構(gòu)體類型可以做為返回值,我猜測(cè)C語(yǔ)言設(shè)計(jì)者當(dāng)時(shí)引入struct結(jié)構(gòu)體的概念,目的是為了增加一種建立C語(yǔ)言新類型的機(jī)制, 換句話說(shuō)它希望通過(guò)struct建立的類型,像內(nèi)置的int float類型一樣使用方便。

//從匯編角度來(lái)看

有兩種返回值方法,第一種是直接返回到寄存器的,第二種是類似于結(jié)構(gòu)體返回值的那樣 建立臨時(shí)存儲(chǔ)區(qū)的返回方式

比如 int 返回值類型、指針?lè)祷刂殿愋?,在ia32平臺(tái)上都是直接返回到eax寄存器 不管是vc還是gcc, 對(duì)于像float 類型的浮點(diǎn)返回值類型,在ia32平臺(tái),往往借助于fpu浮點(diǎn)運(yùn)算器部件中的寄存器存儲(chǔ)于棧中,第三類就是像struct結(jié)構(gòu)體返回值,它需要建立臨時(shí)對(duì)象,對(duì)于c語(yǔ)言來(lái)說(shuō)引入一個(gè)臨時(shí)內(nèi)在區(qū)域是問(wèn)題不大的,但是對(duì)于c++這個(gè)有時(shí)候是致命的。

我是菜鳥(niǎo),希望能幫到你,觀樓主英俊瀟灑,風(fēng)流倜儻,必當(dāng)世豪杰,誠(chéng)邀加入0x30百度貼吧,共商義舉,建不世之功!

c語(yǔ)言函數(shù)返回?cái)?shù)組

你好!

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

注意看后面的注釋

#includestdio.h

int?main()

{

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

float?score[3][3];

float?*a;

int?i,j;

printf("請(qǐng)輸入學(xué)生各科的成績(jī):");

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

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

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

printf("每個(gè)學(xué)生的平均成績(jī)分別為:");

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語(yǔ)言中函數(shù)能返回一個(gè)數(shù)組嗎

不能直接返回一個(gè)數(shù)組,但是可以用其他方式實(shí)現(xiàn)類似功能。

方法1:利用全局變量

分析:全局變量作為C語(yǔ)言的一個(gè)知識(shí)點(diǎn),雖然我們都了解它的特點(diǎn),但在實(shí)際教學(xué)過(guò)程中應(yīng)用得并不是很多。由于全局變量的作用域是從定義變量開(kāi)始直到程序結(jié)束,而對(duì)于編寫(xiě)有多個(gè)返回值的C語(yǔ)言函數(shù),我們可以考慮把要返回的多個(gè)值定義成全局變量。當(dāng)函數(shù)被調(diào)用時(shí),全局變量被更改,我們?cè)侔迅暮蟮娜肿兞恐祽?yīng)用于主調(diào)函數(shù)中。函數(shù)被調(diào)用后被更改后的全局變量值即為函數(shù)的數(shù)個(gè)返回值。下面以一個(gè)實(shí)例演示該方法的應(yīng)用。

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

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

#include "stdio.h"

#include "conio.h"

int max,min;/*定義兩個(gè)全局變量用于保存函數(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(" 請(qǐng)輸入3個(gè)整數(shù):\n");

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

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

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

getch();

}

調(diào)試結(jié)果如下:

請(qǐng)輸入3個(gè)整數(shù):

5,-6,2

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

注意:該方法雖然可以實(shí)現(xiàn)有多個(gè)返回值的函數(shù),但由于全局變量不能保證值的正確性(因?yàn)槠渥饔糜蚴侨郑猿绦蚍秶鷥?nèi)都可以修改它的值,如果出現(xiàn)錯(cuò)誤將非常難以發(fā)現(xiàn)),并且全局變量增加了程序間模塊的耦合,所以該方法要慎用。

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

分析:在教學(xué)過(guò)程中,我們知道C語(yǔ)言函數(shù)參數(shù)的傳遞方式有值傳遞與地址傳遞。當(dāng)進(jìn)行值傳遞時(shí),主調(diào)函數(shù)把實(shí)參的值復(fù)制給形參,形參獲得從主調(diào)函數(shù)傳遞過(guò)來(lái)的值運(yùn)行函數(shù)。在值傳遞過(guò)程中被調(diào)函數(shù)參數(shù)值的更改不能導(dǎo)致實(shí)參值的更改。而如果是地址傳遞,由于傳遞過(guò)程中從實(shí)參傳遞過(guò)來(lái)的是地址,所以被調(diào)函數(shù)中形參值的更改會(huì)直接導(dǎo)致實(shí)參值的更改。因此,我們可以考慮把多個(gè)返回值作為數(shù)組元素定義成一個(gè)數(shù)組的形式,并使該數(shù)組的地址作為函數(shù)的形式參數(shù),以傳址方式傳遞數(shù)組參數(shù)。函數(shù)被調(diào)用后,形參數(shù)組元素改變導(dǎo)致實(shí)參改變,我們?cè)購(gòu)母淖兒蟮膶?shí)參數(shù)組元素中獲得函數(shù)的多個(gè)返回值。以下實(shí)例演示該方法的應(yīng)用。

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

方法:以指針?lè)绞絺鬟f該一維數(shù)組的地址,然后把數(shù)組的最大值與數(shù)組的第一個(gè)元素交換,把數(shù)組的最小值與最后一個(gè)元素交換。函數(shù)被調(diào)用完畢后,實(shí)參數(shù)組中的第一元素為數(shù)組的最大值,實(shí)參數(shù)組中最后一個(gè)元素為數(shù)組的最小值,從而實(shí)現(xiàn)返回?cái)?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))/*最大值與第一個(gè)元素進(jìn)行交換*/

{

k=i;

*temp=*ptr;

*ptr=*(ptr+k);

*(ptr+k)=*temp ;

}

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

{

j=i;

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

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

*(ptr+j)= *temp ;}

}

}

/*調(diào)用最大最小值函數(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();

}

調(diào)試結(jié)果如下:

請(qǐng)輸入6個(gè)整形數(shù),以空格隔開(kāi):

5 8 9 32 -6 4

max=32,min=-6

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

文章標(biāo)題:c語(yǔ)言函數(shù)返回值數(shù)組嗎 c語(yǔ)言函數(shù)返回值可以是數(shù)組嗎
路徑分享:http://muchs.cn/article0/hgidio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄Google、用戶體驗(yàn)服務(wù)器托管、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

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

成都定制網(wǎng)站建設(shè)