/*--------利用指向一位數組的指針作為函數的傳回值來查找資料-------------------
1.本程式的目的是使用一個數組來代表3門學生的成績,找出含有不及格學生的成績,并列印出該學生的所有成績
2.使用了typedef來替換表示指向一維數組的指針類型,float (*PF)[4]中,PF為指針變量,它所指向
的類型為包含4個float型元素的一維數組,用float (* )[4]來表示,除了變量之外的才是類型,想知道某個變量是什麼類型,直接把該變量劃掉,剩下的就是變量的類型
----------------------------------------------------------------------------*/
#include <stdio.h>
typedef float (*PF)[4];
int main()
{
float score[][4]={{60,70,80,90},{56,85,67,88},{34,78,90,66}};
PF search(float (* pointer)[4]);
//float (*search(float (* pointer)[4]))[4] ;
float (* p)[4];
int i,j;
/* printf("enter the number of student:");
scanf("%d",&k);
printf("The scores of No.%d are:\n",k);
p=search(score,k);*/
for(i=0;i<3;i++)
{
p=search(score + i);
//printf("%p ",p);
//printf("%p ",score + i);
if(p == (score + i))
{
printf("No.%d score:",i);
for(j=0;j<4;j++)
{
printf("%5.2f ",*(*p+j));
}
printf("\n");
}
}
return 0;
}
//相當于把“search(float (* pointer)[4])”放在了float (* x)[4]中的x處
PF search(float (* pointer)[4])
//typedef float (*PF)[4]不可以寫在main函數裡面,
//因為預處理替換PF的時候,
//并不會進入main函數先去執行typedef float (*PF)[4];
{
int i=0;
float (* pt)[4];//除去pt後的架構代表基類型,這裡代表的是指向含有4個float元素的一維數組的指針
pt = NULL;
for(i=0;i<4;i++)
if(*( *pointer + i)<60)
{
//pointer 的基類型是指向行的指針也傳給pt了嗎?
//不是的,需要類型比對才行
//指向行的指針加個*,就變為指向列的指針
pt = pointer;
}
return (pt);
}