指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。本文主要介绍C语言中指针与函数相关编程实例练习题,以及相关的示例代码。

1、函数指针求最大值

定义一个函数求函数最大值,通过函数指针调用,代码如下,

#include <stdio.h>
int Max(int, int);  //函数声明
int main(void)
{
    int(*p)(int, int);  //定义一个函数指针
    int a, b, c;
    p = Max;  //把函数Max赋给指针变量p, 使p指向Max函数
    printf("请输入 a 和 b:");
    scanf("%d%d", &a, &b);
    c = (*p)(a, b);  //通过函数指针调用Max函数
    printf("a = %d\nb = %d\nmax = %d\n", a, b, c);
    return 0;
}
int Max(int x, int y)  //定义Max函数
{
    int z;
    if (x > y)
    {
        z = x;
    }
    else
    {
        z = y;
    }
    return z;
}

注意:* 和函数名要用括号括起来,否则因为运算符的优先级原因就变成指针函数。

2、指针作为函数参数

使用函数时需要有多个返回值,此时可以使用指针作为函数参数,通过输入的学生数量和每个学生的学号和成绩,找出成绩最高学生的学号和学分,代码如下,

#include <stdio.h>
#define N 40
void FindMax(int score[],long num[],int n,int *pMaxScore,long *pMaxNum)
{
    int i;
    *pMaxScore=score[0];//假设第一个同学为最高分
    *pMaxNum=num[0];//记录当前学生学号
    for (i=1;i<n;i++)
    {
        if (score[i]>*pMaxScore)//获得最高分
        {
            *pMaxScore=score[i];//不用交换,直接覆盖值
            *pMaxNum=num[i];
        }
    }
}

int main()
{
    int score[N],maxScore;
    int n,i;
    long num[N],maxNum;
    printf("请输入学生数量:\n");
    scanf("%d",&n);
    printf("n = %d\n",n);
    printf("请输入学号 ID 和 学分:\n");
    for (i=0;i<n;i++)
    {
        scanf("%ld%d",&num[i],&score[i]);
    }
    FindMax(score,num,n,&maxScore,&maxNum);
    printf("maxScore=%d,maxNum=%ld\n",maxScore,maxNum);
    return 0;
}

3、指针作为函数返回值

返回指针的函数,主体是函数,返回值是一个指针,也就是指针函数。使用函数时返回字符串,就需要用到指针函数,代码如下,

#include <stdio.h>

char* getword(char);

char* getword(char c)
{
    
    switch (c)
    {
    case'C':return "C/C++/C#";
    case'J':return "Java";
    case'P':return "Python";
    case'L':return "Linux";
    default:return "CJAVAPY";
    }
}
int main()
{
    char input;
    printf("请输入一个大写字母:\n");
    scanf("%c", &input);

    printf("%s\n", getword(input));
}

推荐文档