嵌入式-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

 

posted @ 2022-10-27 22:34  WellMandala  阅读(41)  评论(0编辑  收藏  举报