1. 程式人生 > >C程式設計--指標(用 “ 函式 ” 對 “ 多維陣列 ” 進行操作)

C程式設計--指標(用 “ 函式 ” 對 “ 多維陣列 ” 進行操作)

用指向陣列的指標做函式的引數

  • 問題描述

有一個班,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. 用指向一維陣列的指標變數:
    在這裡插入圖片描述