重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
就是返回一個數(shù)組的地址,比如:
成都創(chuàng)新互聯(lián)公司自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、網(wǎng)站制作、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)管理經(jīng)驗、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團隊及專業(yè)的網(wǎng)站設(shè)計師團隊。
int* Fun(int pArray[])
{
return pArray;
}
int pArray[] 作為參數(shù)和 int *是一樣的
因為不能返回局部變量 函數(shù)的返回地址就是形參的
你要知道 你局部變量的地址是不能返回的
所以,我還是返回一個動態(tài)的地址
int* Fun()
{
int *pInt = new int[100];
return pInt;
}
這樣就可以了
還有啊 最后記得釋放pInt啊
你的程序:
main()
{
int
b[3];
b=pop();
}
int
*
pop()
{
int
a[3],i;//定義的局部變量a[3]在調(diào)用完之后自動釋放其空間
for(i=0;i3;i++)
a[i]=i;
return
a;//返回的是指向數(shù)組a[3]的地址而不是數(shù)組a[3]本身
}
注:既然上面說到調(diào)用的方法返回的是指向數(shù)組a[3]的地址,所以主函數(shù)中b接收的應(yīng)該是指向數(shù)組a[3]的地址,而數(shù)組a[3]在方法調(diào)用完后又被釋放了,所以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/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ù)組方法類似。
int * scanffile(FILE *fp,int n){
int i;
static int array[10]; //因為array是局部變量,隨scanffile()函數(shù)的結(jié)束,該內(nèi)存被釋放,因此,你在之后得不到相應(yīng)的數(shù)據(jù)了。 改成static靜態(tài)變量就可以了!
for(i=0;in;i++){
fscanf(fp,"%d\t",array[i]);
}
for(i=0;i5;i++)
printf("%d\t",array[i]);
return array;
}
你好!
將函數(shù)采用指針的形式返回平均值
注意看后面的注釋
#includestdio.h
int?main()
{
float?*student_aver(float?array[3][3]);???//?改成指針的形式輸出?
float?score[3][3];
float?*a;
int?i,j;
printf("請輸入學(xué)生各科的成績:");
for(i=0;i3;i++)
for(j=0;j3;j++)
scanf("%f",score[i][j]);
printf("每個學(xué)生的平均成績分別為:");
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ù)組,但是可以通過返回對應(yīng)類型指針的方式,返回數(shù)組。
在大多數(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ù)組的指針。?
}