C语言----函数指针

回调函数

1、 函数指针 做参数

2、 回调过程

例代码

//
//  main.m
//  C_Project_12
//
//  Created by  on 15/3/26.
//  Copyright (c) 2015年 . All rights reserved.
//

#import <Foundation/Foundation.h>

//课堂练习题:写一函数查找成绩90分以上的学员,使?用回调函数在姓名后加”?高富 帅”。

//1.定义结构体类型
typedef struct student {
    char name[20];
    float score;
} Student;

Student *generateStudentsInfo(int count);
Student *generateStudentsInfo(int count) {
    Student *stus = malloc(sizeof(Student) * count);
    for (int i = 0; i < count; i++) {
        printf("请输入第%d个学生的信息\n", i + 1);
        printf("姓名:");
        scanf("%s", (stus + i)->name);
        printf("成绩:");
        scanf("%f", &(stus + i)->score);
    }
    return stus;
}

void printStudentsInfo(Student *stus, int count);
void printStudentsInfo(Student *stus, int count) {
    printf("\n---------------------------\n");
    for (int i = 0; i < count; i++) {
        printf("姓名:%s\t\t\t\t成绩:%.2f\n", (stus + i)->name, (stus + i)->score);
    }
    printf("\n---------------------------\n");
}

void modifyName(char *name);
void modifyName(char *name) {
    strcat(name, "-高富帅");
}

void searchStudentInfo(Student *stus, int count, float score, void (*point)(char *));
void searchStudentInfo(Student *stus, int count, float score, void (*point)(char *)) {
    for (int i = 0; i < count; i++) {
        if ((stus + i)->score > score) {
            point((stus + i)->name);
        }
    }
}

int main(int argc, const char * argv[]) {

    Student *stus = generateStudentsInfo(2);
    printStudentsInfo(stus, 2);
    searchStudentInfo(stus, 2, 90, modifyName);
    printStudentsInfo(stus, 2);

    return 0;
}
时间: 2024-10-04 22:51:54

C语言----函数指针的相关文章

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

c语言函数指针实例

如果使用typedef 是这样的 //可以把一个小写字母变成大写 //char (*pFun)(char); typedef char (*PTRFUN)(char); PTRFUN pFun; char glFun(char a){ return a & 223;} void print(int a,PTRFUN call){ cout<<call(a)<<endl;}void main() { pFun = glFun; print('a',pFun);} 如果不使用t

c语言函数指针

1 void PrePrintOrTree(struct TreeNode* root, void (*WorkPrint)(double)){ 2     struct TreeNode* index = root; 3     if (root == NULL){ 4         return; 5     } 6     PrePrintOrTree(root->lchild,WorkPrint); 7     (*WorkPrint)(root->value); 8     Pre

C语言 函数指针的应用

简单的介绍下C语言函数指针的用法. 函数指针的声明: char (* FunPtr)(char); 或者char (* FunPtr)(char ch);  (声明类型个形参类型根据实际情况更改) 例: 1 #include"stdio.h" 2 3 char myFun(char ch) 4 { 5 printf("myFun is called, your char is %c.\n",ch); 6 return 'w'; 7 } 8 9 void main()

深入浅出剖析C语言函数指针与回调函数(二)

上一篇博文的地址: http://blog.csdn.net/morixinguan/article/details/65494239 这节,我们来看看函数指针与回调函数在Linux内核中的应用. 从上节我们了解到,函数指针和回调函数在开发者和用户之间的一个例子,那么这节,我将引用Linux内核中文件操作结构体来详细的说明. 我们首先来看到这个结构体,这段代码位于linux内核的include/linux/fs.h中,由于代码众多,我只截取几个最基本的例子: File_operations文件操

深入理解C语言函数指针(转)

本文转自:http://www.cnblogs.com/windlaughing/archive/2013/04/10/3012012.html 示例1: void myFun(int x); //声明也可写成:void myFun( int ); int main() { myFun(100);//一般的函数调用 return 0; } void myFun(int x) { printf("myFun: %d\n",x); } 我们一开始只是从功能上或者说从数学意义上理解myFun

C语言 函数指针定义三种方式

//函数指针 #include<stdio.h> #include<stdlib.h> #include<string.h> //函数指针类型跟数组类型非常相似 //函数名就是函数的地址,函数的指针,对函数名进行&取地址操作,还是函数名本身,这是C语言编译器的特殊处理 void test(int a){ printf("a=%d\n",a); } void ProtectA(){ //定义函数类型 typedef void(FunType)(

深入浅出剖析C语言函数指针与回调函数(一)【转】

本文转载自:http://blog.csdn.net/morixinguan/article/details/65494239 关于静态库和动态库的使用和制作方法. http://blog.csdn.NET/morixinguan/article/details/52451612 今天我们要搞明白的一个概念叫回调函数. 什么是回调函数? 百度的权威解释如下: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说

C语言 函数指针二(正向调用)

//函数指针做函数参数 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<Windows.h> /* 函数指针做函数参数 实现了2大功能:1.定义了一个指针类型,分配了4个字节大小的内存空间 2.规定了调用函数的参数列表,和返回值 正向调用:通过window自带系统函数库调用dll文件,获取dll文件中的函数地址,执行函数 反向调用:通过函数指针,在另一个函数里调用别的函数 */