嵌入式-C语言基础:指针函数
指针函数:返回指针的函数,即函数返回一个地址。例如:int * a(int x,int y);由于()的优先级比*高,因此a先与()结合,a(int x,int y)显然是一个函数,函数前面带一个int * 表示返回值为int *
类型,也就是指向整型的地址。
输入一个学生编号,打印一个学生得成绩:
#include<stdio.h> //定义一个指针函数:获取输入学生下标对应得地址,传数学生得下标和一个指针数组 int * getposPerson(int pos,int (*pstu)[4]){ int * p; p = (int*)(pstu+pos);//数组名pstu表示指针数组得首元素得地址,也就是scores[0]得地址,首地址偏移pos就是一维得成绩数组偏移 return p; } int main() { //定义3*4的二维数组:表示3个人的四门课的成绩(二维数组可以理解为存放了多个一维数组得数组,如果知道多个一维数组得地址,就可遍历多个数组) // int a1[4]={45,46,47,58}; // int a2[4]={85,56,87,98}; // int a3[4]={100,100,100,89}; //数组名表示地址,所以姑且把二维数组当作指针数组来用 int scores[3][4]={ {45,46,47,58}, {85,56,87,98}, {100,100,100,89} }; int pos; int *ppos; printf("请输入学生下标:\n"); scanf("%d",&pos); //获取该学生成绩数组得首地址,scores(理解为a1)表示首元素得地址,也就是第一个成绩数组得地址 ppos=getposPerson(pos,scores); printf("该学生得成绩首地址:%p",ppos); printf("该学生得成绩:\n"); for(int i=0;i<3;i++) { printf("该学生得成绩:%d\n",*(ppos+i)); } return 0; }
输出结果:
请输入学生下标:
1
该学生得成绩首地址:000000000061FDF0该学生得成绩:
该学生得成绩:85
该学生得成绩:56
该学生得成绩:87
4556