天天看點

C_001-函數傳回值類型為指向一維數組的指針

/*--------利用指向一位數組的指針作為函數的傳回值來查找資料-------------------
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);
	}
           

繼續閱讀