C语言基础语法第六章指针 demo18_指针函数的概念和实战
1.指针函数定义:函数返回的值类型是指针类型,即返回的值是一个地址
列如:int a(int x,int y);a是函数名,调用它以后能得到一个int型(指向整形数据的指针),即整形数据的地址。
例有a个学生,每个学生有b门课程的成绩。要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。
#include <stdio.h>
//指针函数定义:函数返回的值类型是指针类型,即返回的值是一个地址
//列如:int *a(int x,int y);a是函数名,调用它以后能得到一个int*型(指向整形数据的指针),即整形数据的地址。
//例有a个学生,每个学生有b门课程的成绩。要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。
int* getPosPerson(int pos,int (*pstu)[4])//定义指针函数,返回指针的函数,返回的值是一个地址
{
int *p;
p = (pstu+pos);//指针可以当数组名使用(pstu+pos)等价于scores+pos,这里也就获取了二维数组子数组地址
//p = (int *)(pstu+pos)
return p;//返回一个地址
}
int main()
{
int scores[3][4]={{55,66,77,88},{66,55,99,100},{11,22,33,59}};
int *ppos;
int pos;
printf("请输入你需要看的学生学号数:0,1,2\n");
scanf("%d",&pos);
ppos = getPosPerson(pos,scores);//传递输入的值 和二维数组首地址(数组名就是数组的地址)scores=scores[0]=scores[0][0]
for (int i=0;i<4;i++){//通过for遍历子数组0 1 2 中的元素
printf("%d ",*ppos++);//如果键盘输入0这里ppos的地址是二维数组首地址scores的首地址也就是scores[0]的地址,也就是scores[0][0]的地址
}
return 0;
}
//作业对例8.25中的学生,找出其中有不及格的课程的学生及其学生号。