C程序设计--指针(用 “ 函数 ” 对 “ 多维数组 ” 进行操作)

版权声明:本文由 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]

多维数组名也可作为函数参数,有两种方法:

  1. 用指向变量的指针变量:
    在这里插入图片描述
  2. 用指向一维数组的指针变量:
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42887760/article/details/83959250