1、我們首先定義一個二級指針和一個行列變量[int ** array,row,column;]。
目前創新互聯建站已為上千余家的企業提供了網站建設、域名、網站空間、網站運營、企業網站設計、順河網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。
2、然后我們編寫進入行和列的語句,代碼如圖所示。
3、接下來我們可以用一維數組打開一維一維數組。
4、接下來,我們使用[array [i] =(int *)malloc(sizeof(int)* column);]來為數組再次生成包含該數組的新數組。
5、然后我們可以為它賦值并輸出[代碼如圖所示]。
6、運行程序后我們可以看到這種效果。
方法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/C++只能返回數組的指針而不能返回整個數組。即使返回數組的指針,但如果函數中的數組是自動性質,那將是危險的。這是比較正宗的表述。如果確實需要從函數中返回自動性質的數組的全部元素值,有沒有辦法呢?有。由于C/C++是允許返回結構體的,可以定義一個結構體模板,把數組作為成員安排在其中,函數中臨時聲明結構體變量,操作其中的數組;完畢后返回結構體變量,在主調函數中用同類型的結構體變量接收就可間接實現“返回一個數組”。舉例代碼如下:
#include?"stdio.h"
struct?A{
int?m[30];//把數組m安排在結構體A中
};
struct?A?fun(int?n){
int?i,j,k;
struct?A?s;//在函數中聲明自動型結構體變量s
for(i=0;in;s.m[i++]=i+1);//為結構體成員數組m賦值1~15
for(j=n-1,i=0;ij;i++,j--)//倒序這個數組
k=s.m[i],s.m[i]=s.m[j],s.m[j]=k;
return?s;//返回結構體變量s
}
int?main(int?argc,char?*argv[]){
A?a;//主調函數中聲明同類型結構體變量a接收函數fun的返回值
int?i;
a=fun(15);//用15調用fun(不要大于30,只是舉例),將結果賦于a
for(i=0;i15;i++)//輸出看看是不是倒序了...
printf("%d?",a.m[i]);
printf("\n");
return?0;
}
運行結果如下:
在C語言中,無法直接返回一個數組,但是可以通過返回對應類型指針的方式,返回數組。
在大多數情況下,一維數組和一維指針是可以通用的。
比如,定義一個函數,申請一定長度的整型動態數組,其長度用參數傳入,并將結果返回。如出錯,返回空指針NULL。 代碼可以寫成如下形式:
int?*int_array_create(int?n)//參數n為數組元素個數
{
int?*r;?
if(n=0)?return?NULL;//參數錯誤
r?=?(int?*)malloc(sizeof(int)*n);//申請內存空間,大小為n個int長度。
return?r;//返回得到的整型數組的指針。?
}
數組在作為函數返回值或者函數參數時,實際上只作為指針來返回或者傳遞的。因此返回值用指針數據類型。比如下面的代碼:
int?g_a[4]?=?{1,2,3,4};
int?*?retn_arrary()?//返回值用指針類型即要。
{
return?g_a;?
}
網站名稱:c語言中函數如何返回數組,c語言函數調用怎么返回數組
網頁地址:http://vcdvsql.cn/article2/hspjic.html
成都網站建設公司_創新互聯,為您提供做網站、關鍵詞優化、網站改版、響應式網站、自適應網站、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯