版权声明:本文由 Micheal 超 博客 创作,转载请附带链接,有问题欢迎交流。 https://blog.csdn.net/qq_42887760/article/details/83959250
用指向数组的指针做函数的参数
- 问题描述
有一个班,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] |
多维数组名也可作为函数参数,有两种方法:
- 用指向变量的指针变量:
- 用指向一维数组的指针变量: