返回指针值的函数,一般定义形式为:
类型名 * 函数名(参数列表)
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;
}
运行结果: