你好!
創(chuàng)新互聯(lián)專注于寧明企業(yè)網站建設,響應式網站,商城系統(tǒng)網站開發(fā)。寧明網站建設公司,為寧明等地區(qū)提供建站服務。全流程按需網站制作,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務
將函數采用指針的形式返回平均值
注意看后面的注釋
#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?
}
不能夠返回整個數組,只能返回數組中的某個值。如果數組在函數內部定義,也不能直接返回數組名(臨時變量在函數結束時會釋放)。一般寫程序不會把數組作為返回值返回,想要返回整個數組,可以用指針來實現。
不用返回了,你這里函數里直接對數組元素進行操作,調用完之后a就是排好的
#includestdio.h
main()
{
int
a[count];
……;
order(a,count);//在這個地方調用排序(地方一)
……
}
void
order(int
a[],int
count)
//數組按從小到大排序
{
int
i,j,x;
for(i=0;icount;i++)
for(j=i+1;jcount;j++)
if(a[i]a[j])
{
x=a[i];
a[i]=wa[j];
a[j]=x;
}
}
你錯了
如圖所示,我想問的問題是:
第一張圖片之所以返回一個垃圾值是因為退出test函數后指針P指向變量a地址的值已經被釋放,所以返回一個垃圾值!
答 不是返回垃圾值!而是返回a的地址!!所以輸出是%d是a的地址
那么,同樣的道理,第二張圖返回的值也應該是個垃圾值才對??!為什么返回的還是數組a所存放的值呢?
答 而是返回傳入指針的地址?。≈灰摰刂凡槐幌到y(tǒng)使用 自然輸出字符串
用指針,另外保存數據的變量退出函數時不得消失。
例如:
#includestdio.h
int * fun(int n)
{
int i;
static int a[100]; // 這里用static
for (i=0;in;i++) a[i]=i;
return a[0];
}
void main()
{
int i,n=5;
int *p; // 聲明指針
p = fun(n); // 返回指針
for (i=0;in;i++) printf("%d\n",p[i]); // 把 p 看成數組來輸出
}
得 0 1 2 3 4
擴展資料:
注意事項
1、數組的維度必須是一個常量表達式
int main(void)
{
constexpr int i = 20;
int j = 5;//不是常量表達式
int arr1[i];//正確
int arr2[j];//錯誤
system("pause");
return 0;
}
2、默認情況下,數組的元素被默認初始化。
而且需要注意的是,和內置類型的變量一樣,如果在函數內部定義了某種內置類型的數組,那么默認初始化會令數組有未定義的值。
你的程序:
main()
{
int
b[3];
b=pop();
}
int
*
pop()
{
int
a[3],i;//定義的局部變量a[3]在調用完之后自動釋放其空間
for(i=0;i3;i++)
a[i]=i;
return
a;//返回的是指向數組a[3]的地址而不是數組a[3]本身
}
注:既然上面說到調用的方法返回的是指向數組a[3]的地址,所以主函數中b接收的應該是指向數組a[3]的地址,而數組a[3]在方法調用完后又被釋放了,所以b接收不到數組a[3],故出錯。
正確的程序:
#includestdio.h
main()
{
int
b[3];
pop(b,3);
}
void
pop(int
a[],int
n)//該方法傳入兩個參數,第一個是傳入指向數組的地址,第二個參數是傳入數組的長度,不需寫返回語句return,只需通過指向數組的地址的傳入就可以直接將數組b[]的值改變
{
int
i;
for(i=0;in;i++)
a[i]=i;
}