在C語言中,無法直接返回一個數(shù)組,但是可以通過返回對應類型指針的方式,返回數(shù)組。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站設(shè)計、成都做網(wǎng)站、五大連池網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、五大連池網(wǎng)絡(luò)營銷、五大連池企業(yè)策劃、五大連池品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供五大連池建站搭建服務,24小時服務熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
在大多數(shù)情況下,一維數(shù)組和一維指針是可以通用的。
比如,定義一個函數(shù),申請一定長度的整型動態(tài)數(shù)組,其長度用參數(shù)傳入,并將結(jié)果返回。如出錯,返回空指針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èi)存空間,大小為n個int長度。
return?r;//返回得到的整型數(shù)組的指針。?
}
一、數(shù)組可定義為全局變量,函數(shù)直接調(diào)用。
二、數(shù)組可定義為局部變量,再通過參數(shù)傳遞到函數(shù)中調(diào)用(實參傳數(shù)組名,表示數(shù)組首地址,也可通過指針或數(shù)組名+數(shù)字來傳遞數(shù)組局部地址)。
三、main函數(shù)想要調(diào)用函數(shù)返回的數(shù)組,可用static定義靜態(tài)變量或malloc定義動態(tài)數(shù)組(字符串常量也可返回使用,但局部變量,在函數(shù)調(diào)用結(jié)束會被釋放,不能作為返回地址使用)。
下面是演示代碼:
#include stdio.h
#include string.h
#include malloc.h
char str1[]="我是全局變量數(shù)組";
char *fun0(char str2[]);
char *fun1();
char *fun2();
int main()
{
char *str3=NULL,*str4=NULL,*str5=NULL;
char str2[]="我是main函數(shù)的局部數(shù)組變量";
str3=fun0(str2);
printf("str3:%s,fun函數(shù)調(diào)用結(jié)束,我的地址依然可以使用\n",str3);
str4=fun1();
printf("str4:%s,fun函數(shù)調(diào)用結(jié)束,我的地址依然可以使用\n",str4);
str5=fun2();
printf("str5:%s,fun函數(shù)調(diào)用結(jié)束,函數(shù)結(jié)束不會自動釋放\n",str5);
free(str5);
return 0;
}
char *fun0(char s[])
{
static char str3[]="我是fun函數(shù)申明的靜態(tài)數(shù)組變量";
printf("str1:%s,fun函數(shù)可以直接調(diào)用\n",str1);
printf("str2:%s,fun函數(shù)通過參數(shù)將我的地址傳進來\n",s);
return str3;
}
char *fun1()
{
char *str4="我是fun1函數(shù)的字符串常量";
return str4;
}
char *fun2()
{
int len;
char sTemp[]="這是一個臨時數(shù)組,之后用于給mallc申請的地址傳值,傳遞內(nèi)容為:(我是fun函數(shù)通過mallic申請的數(shù)組)";
char *str5=NULL;
len=strlen(sTemp+63);
str5=(char *)malloc(sizeof(char)*len+1);
if(!str5)return NULL;
strcpy(str5,sTemp+63);
str5[len-2]=0;
return str5;
}
C/C++不能直接返回一個數(shù)組。這是由于在C/C++中,數(shù)組不是一種類型,因此不能被直接返回。 在C/C++中,一般有兩種方法來返回一個數(shù)組。 第一種方法: 返回一個指向數(shù)組的指針,例如char (*retArray)[10]聲明了一個函數(shù)retArray,該函數(shù)可以返回指向具有10個char元素的數(shù)組例子如下:#include#includeint (*retArray())[10]{int (*a)[10];int i=0;/*動態(tài)開辟空間*/ a=calloc(10,sizeof(int));/*賦值*/for(i=0;i10;i++){(*a)[i]=i;}return a;}int main(){int (*b)[10]; /*函數(shù)返回指向數(shù)組的指針*/ b=retArray(); /*打印第一個元素*/ printf("%d/n",(*b)[0]); /*釋放空間*/free(b);return 0;}第二種方法: 如果你不喜歡用指針的形式返回數(shù)組,那么可以采用返回一個結(jié)構(gòu)的形式。這種形式相對較安全,可以避免忘記釋放指針而造成內(nèi)存泄露,也可以避免訪問懸掛指針造成的錯誤。但缺點是由于結(jié)構(gòu)是先拷貝再返回,因此如果結(jié)構(gòu)較大時,會影響效率和占用較大內(nèi)存。 例子如下:#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)在返回指針時要切記要避免內(nèi)存泄露和訪問懸掛指針。 (2)很多人認為指針和數(shù)組等價的,這是錯誤的。int (*a)[10]和int b[10]兩者是不能直接用a=b來賦值的。在數(shù)組和指針作為函數(shù)參數(shù)傳遞時,二者可以認為等價,這是因為數(shù)組會被轉(zhuǎn)化為指針來傳遞。 (3)返回多維數(shù)組方法類似。
1、我們首先定義一個二級指針和一個行列變量[int ** array,row,column;]。
2、然后我們編寫進入行和列的語句,代碼如圖所示。
3、接下來我們可以用一維數(shù)組打開一維一維數(shù)組。
4、接下來,我們使用[array [i] =(int *)malloc(sizeof(int)* column);]來為數(shù)組再次生成包含該數(shù)組的新數(shù)組。
5、然后我們可以為它賦值并輸出[代碼如圖所示]。
6、運行程序后我們可以看到這種效果。