一维数组名和多维数组名均可作为函数参数,用指针变量做形参,以接受形参数组名传递来的地址有两种方法:1、用指向变量的指针变量。2、用指向一维数组的指针变量。
例题1:有一个班,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}};
average(*score,12);
search(score,2); //求第二个同学的成绩;
return 0;
}
void average(float *p, int n){ //平均成绩
float *p_end;
float sum = 0, aver;
p_end = p + (n-1); //当有n个元素的时候最后一个元素的地址是 p +(n-1)
for (; p <= p_end; p++) {
sum = sum + (*p);
}
aver = sum/n;
printf("averge=%5.2f\n",aver);
}
void search(float (*p)[4], int n) { //p是指向具有4个一维元素的指针
printf("The score of No.%d are:\n",n);
for (int i = 0; i < 4; i++) {
printf("%5.2f ",*(*(p+n)+i));
}
printf("\n");
}
例题2:有一个班,3个学生,各学4门课,查找一门以上课程不及格的学生,并输出他们的全部课程的成绩
//有一个班,3个学生,各学4门课,查找一门以上课程不及格的学生,输出他们的全部课程的成绩
#include <stdio.h>
void search(float(*p)[4], int n);
int main() {
float score[3][4] = { {65,57,70,60},{58,87,90,81},{90,99,100,98} };
search(score, 3);
return 0;
}
void search(float(* p)[4], int n) {
int i, j, flag;
for (i = 0; i < n; i++) {
flag = 0;
for (j = 0; j < 4; j++) {
if (*(*(p + i) + j) < 60)flag = 1;
}
if (flag == 1) {
for (j = 0; j < 4; j++) {
printf("%f\t", *(*(p + i) + j));
}
printf("\n");
}
}
}