C程式設計--指標(用 “ 函式 ” 對 “ 多維陣列 ” 進行操作)
阿新 • • 發佈:2018-12-05
用指向陣列的指標做函式的引數
- 問題描述
有一個班,3個學生,各4門課,計算總平均分以及第n個學生的成績。
- 程式碼實現
#include<stdio.h>
void average(float *p,int n);//用 指向變數的指標變數
void search(float (*p)[4],int n);//用 指向一維陣列的指標變數
int main()
{
float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
//求12個分數的平均分
average( *score,12);//注意:score[0]等價於*score、*(score+0)
//求序號為2的學生的成績
search(score,2);
return 0;
}
//實參為:average( *score , 12 );或者 average( score[0] , 12 );
void average(float *p,int n){
float sum=0.0,aver;
float *p_end=p+n-1;
for(;p<=p_end;p++){
sum+=*p;
}
aver=sum/n;
printf("average=%5.2f\n",aver);
}
//實參為:average( score , 12 );
void search(float (*p)[4],int n){
printf("第%d名學生的成績為:\n",n);
for(int i=0;i<4;i++){
printf("%5.2f ",*(*(p+n)+i));
}
putchar(10);
}
總結
在陣列中: *(a+i)和 a[i] 等價
在二維陣列中:
含義 | 表示形式 |
---|---|
a[i][j] 的值 | a[i][j]、*(a[i]+j)、 *( *(a+i)+j) |
a[i][j] 的地址 | &a[i][j]、a[i]+j、*(a+i)+j |
第i行0列元素的地址(即:a[i][0]的地址) | a[i]、*(a+i) |
一行的首地址 | a+i、&a[i] |
多維陣列名也可作為函式引數,有兩種方法:
- 用指向變數的指標變數:
- 用指向一維陣列的指標變數: