本文目錄一覽:
在C語言中如何使函數返回數組
C/C++不能直接返回一個數組。這是由於在C/C++中,數組不是一種類型,因此不能被直接返回。在C/C++中,一般有兩種方法來返回一個數組。第一種方法:返回一個指向數組的指針,例如char (*retArray)[10]聲明了一個函數retArray,該函數可以返回指向具有10個char元素的數組例子如下:#include#includeint (*retArray())[10]{int (*a)[10];int i=0;/*動態開闢空間*/a=calloc(10,sizeof(int));/*賦值*/for(i=0;i10;i++){(*a)[i]=i;}return a;}int main(){int (*b)[10];/*函數返回指向數組的指針*/b=retArray();/*打印第一個元素*/printf(“%d/n”,(*b)[0]);/*釋放空間*/free(b);return 0;}第二種方法:如果你不喜歡用指針的形式返回數組,那麼可以採用返回一個結構的形式。這種形式相對較安全,可以避免忘記釋放指針而造成內存泄露,也可以避免訪問懸掛指針造成的錯誤。但缺點是由於結構是先拷貝再返回,因此如果結構較大時,會影響效率和佔用較大內存。例子如下:#includestruct tag{int a[10];}x,y;struct tag retArray(){int i=0;for(i=0;i10;i++)x.a[i]=i;return x;}int main(){struct tag y=retArray();printf(“%d/n”,y.a[3]);return 0;}注意:(1)在返回指針時要切記要避免內存泄露和訪問懸掛指針。(2)很多人認為指針和數組等價的,這是錯誤的。int (*a)[10]和int b[10]兩者是不能直接用a=b來賦值的。在數組和指針作為函數參數傳遞時,二者可以認為等價,這是因為數組會被轉化為指針來傳遞。(3)返回多維數組方法類似。
c語言中函數能返回一個數組嗎
不能直接返回一個數組,但是可以用其他方式實現類似功能。
方法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) /*定義求最大最小值的函數*/
{max=min=a; /*初始化最大最小值*/
if(max if(max if(minb)min=b;
if(minc)min=c;
}
main()
{int x,y,z;
printf(” 請輸入3個整數:\n”);
scanf(“%d,%d,%d”,x,y,z);
max_min(x,y,z) ;/*調用求最大值與最小值的函數*/
printf(“三個數中的最大值為:%d;最小值為:%d”,max,min);/*輸出最大值與最小值*/
getch();
}
調試結果如下:
請輸入3個整數:
5,-6,2
三個數中的最大值為:5;最小值為:-6
注意:該方法雖然可以實現有多個返回值的函數,但由於全局變量不能保證值的正確性(因為其作用域是全局,所以程序範圍內都可以修改它的值,如果出現錯誤將非常難以發現),並且全局變量增加了程序間模塊的耦合,所以該方法要慎用。
方法2:傳遞數組指針
分析:在教學過程中,我們知道C語言函數參數的傳遞方式有值傳遞與地址傳遞。當進行值傳遞時,主調函數把實參的值複製給形參,形參獲得從主調函數傳遞過來的值運行函數。在值傳遞過程中被調函數參數值的更改不能導致實參值的更改。而如果是地址傳遞,由於傳遞過程中從實參傳遞過來的是地址,所以被調函數中形參值的更改會直接導致實參值的更改。因此,我們可以考慮把多個返回值作為數組元素定義成一個數組的形式,並使該數組的地址作為函數的形式參數,以傳址方式傳遞數組參數。函數被調用後,形參數組元素改變導致實參改變,我們再從改變後的實參數組元素中獲得函數的多個返回值。以下實例演示該方法的應用。
實例2:編寫函數求一維整形數組的最大值與最小值,並把最大值與最小值返回給主調函數。
方法:以指針方式傳遞該一維數組的地址,然後把數組的最大值與數組的第一個元素交換,把數組的最小值與最後一個元素交換。函數被調用完畢後,實參數組中的第一元素為數組的最大值,實參數組中最後一個元素為數組的最小值,從而實現返回數組的最大值與最小值的功能。程序參考代碼如下:
#include “stdio.h”
#include “conio.h”
void max_min(int *ptr,int n) /*定義求數組最大值最小值的函數,傳遞數組指針*/
{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 ;}
}
}
/*調用最大最小值函數*/
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個整形數,以空格隔開:
5 8 9 32 -6 4
max=32,min=-6
注意:該方法適用於多個返回值的數據類型一致的情況。當返回值數據類型不一致時,不適用該方法
c語言函數返回數組
你好!
將函數採用指針的形式返回平均值
注意看後面的注釋
#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 接收函數的返回值
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; // 輸出數組 a
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/275858.html