C语言--指针--返回指针值的函数

返回指针值的函数,一般定义形式为:

   类型名 * 函数名(参数列表) 

   int *a(int x,int y)  

a为函数名,调用它以后能得到一个指向整型数据的指针(地址)
() 优先级高于 * ,所以a先与()结合。前边还有个 *,表示此函数是指针型函数(函数值是指针)

例题10-24 有若干个学生的成绩(每个学生有4门课),要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数实现。

//例题10-24 有若干个学生的成绩(每个学生有4门课),要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数实现。 

#include<stdio.h>
int main()
{
    
    
	float score[][4]={
    
    {
    
    60,70,80,90},{
    
    56,89,67,88},{
    
    34,78,90,66}};
	float *search(float (*pointer)[4],int n);  //函数声明 
	float *p;
	int i,m;
	printf("ente the number of student:");
	scanf("%d",&m); //m是要查找的学生序号 
	printf("The scores of No.%d are:\n",m);
	p=search(score,m);
	for(i=0;i<4;i++)
		printf("%5.2f\t",*(p+i));// *(p+i):该学生第i门课程的成绩 
	printf("\n");
	return 0;
} 
float *search(float (*pointer)[4],int n)
//pointer是指向包含4个元素的一维数组的指针变量 
//pointer+1 指向socre数组序号为1的行 
// *(pointer+1) 指向1行0列元素。加上*后,指针 行控制-->列控制 
{
    
    
	float *pt;
	pt=*(pointer+n);
	return pt;
}

输入:1
结果如图:
在这里插入图片描述

例题10-25 对上例中的学生,找出其中不及格课程的学生及其学生号

//例题10-25 对上例中的学生,找出其中不及格课程的学生及其学生号

#include<stdio.h>

float *search(float (*pointer)[4])//pointer是指针变量,指向一维数组(有4个元素) 
{
    
    
	int i;
	float *pt;   //pt:区分有无不及格课程的标志 
	pt=*(pointer+1);//即把pt指向本行末尾,若无不及格的,pt指向不变 
	for(i=0;i<4;i++)
		if(*(*pointer+i)<60)
			pt=*pointer;//若有不及格的,使pt指向本行0列元素 
	return pt;	
} 

int main()
{
    
    
	float *p,score[][4]={
    
    {
    
    60,70,80,90},{
    
    56,89,67,88},{
    
    34,78,90,66}};
	int i,j;
	for(i=0;i<3;i++)
	{
    
    
		p=search(score+i);  //score+i :是score第i行的首地址 
		if(p==*(score+i))// *(score+i):第i行第0列元素 
		{
    
    
			printf("No.%d scores:",i);
			for(j=0;j<4;j++)
				printf("%5.2f ",*(p+j));
			printf("\n");
		}
	 } 
	return 0;
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xiaoyue_/article/details/105145752