09- c语言指针和函数 (C语言)

一 函数指针

1、基本概念
什么是函数指针呢?
本质:指针
作用:用来指向一个函数
2、定义一个函数指针类型
typedef int (*FUNC)(int, int);
定义了一个函数指针类型,类型名称为FUNC,该函数指针类型的变量可以指向这么一类函数:返回值为int形参为int, int
3、定义函数指针变量

FUNC f; //f是函数指针变量
4、通过函数指针变量调用函数

#include <iostream>

typedef int (*FUNC)(int, int);

int test(int x, int y){
    return x>y?x:y;
}

int main() {
    //std::cout << "Hello, World!" << std::endl;
    FUNC f;
    f = test;

    int x;
    x = f(10, 20);
    printf("view the x: %d", x);
    return 0;
}

5、练习
假如有a(), b(), c(), d()四个函数,编写代码实现:随机调用其中的函数

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <time.h>

typedef int (*FUNC)(int, int);

int max(int x, int y){
    return x>y?x:y;
}
int add(int x, int y){
    return x+y;
}

typedef void (*SKILL)();
//假设我开发了一个游戏,某个英雄有4个技能,每个技能的发射都是独立的函数(4个技能就有4个函数),我要随机的发动其void skill1()

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <time.h>

typedef int (*FUNC)(int, int);
typedef void (*SKILL)();

int max(int x, int y){
    return x>y?x:y;
}

int add(int x, int y){
    return x + y;
}

void skil1(){
    printf("skill1\n");
}

void skill2(){
    printf("skill2\n");
}

void skill3(){
    printf("skill3\n");
}

void skill4(){
    printf("skill4\n");
}

int main(){
    FUNC f;
    f = max;
    printf("max: %d\n", f(10, 20));

    f = add;
    printf("add: %d\n", f(10, 20));

    //s是个数组,是个函数指针数组,数组中的每个元素都是一个函数指针
    SKILL s[4] = {skil1, skill2, skill3, skill4};

    srand(time(NULL));
    int n = rand()%4;
    s[n]();
    return 0;
}

二 指针函数

本质:函数,返回值是指针的函数(单纯的文字游戏)。

void *f();
int *f();
char *f();

strcpy, strncpy, strcat, strncat, strstr, strtok 这些都是指针函数。

三 练习

假如有数组char *ptr[4];使用malloc对数组p中的每一个元素进行内存分配

for(i = 0; i < 4; i++)
    p[i] = (char *)malloc(20);

分别将数组p中每一个元素所指向的地址空间拷贝如下字符串:
ZHAngsan WanGWu zhaOLiU TianQI
实现如下功能:
1、将所有的大写转换为小写(不能使用字符带小写转换函数)
2、对数组p中的每一个元素指向的字符串按照字母表的先后顺序进行排序。

(将 zhangsan wangwu zhaoliu tianqi 按照字母表进行排序)

四 笔试题

  • a) 一个整型数(An integer) int a;
  • b)一个指向整型数的指针( A pointer to an integer)int *p;
  • c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer toan integer) int *p;    //二级指针
  • d)一个有 10 个整型数的数组( An array of 10 integers)int a[10];
  • e) 一个有 10 个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)本质是数组 int p[10];
  • f) 一个指向有 10 个整型数数组的指针( A pointer to an array of 10 integers)本质:指针, int (*p)[10];       //int[10] (*p)
  • g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)本质:指针 int (*p)(int);   //p是指针变量 int(int) (*p);   typedef int (*FUNC)(int); FUNC p;
  • h)一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数  (An array of ten pointers to functions that take an integer argument and return an integer)  本质:数组, int (*p[10])(int); // int(int) (*p[10]);     typedef int (*FUNC)(int);     FUNC f[10];

猜你喜欢

转载自blog.csdn.net/March_A/article/details/131356202
今日推荐