Obj-c1[基础用法]

#import <Foundation/Foundation.h>

//int(*)(int ,int) 原类型
//PFUN 新类型
typedef int(*PFUN)(int ,int);

typedef struct student{
    char name[20];
    char sex;
    int age;
    float score;
}STUDENT;

BOOL sortByAge(STUDENT stu, STUDENT stu1);
BOOL sortByAge(STUDENT stu, STUDENT stu1){
    return stu.age > stu1.age;
}
BOOL sortByName(STUDENT stu, STUDENT stu1);
BOOL sortByName(STUDENT stu, STUDENT stu1){
    return strcmp(stu.name, stu1.name) > 0;
}
BOOL sortByscore(STUDENT stu, STUDENT stu1);
BOOL sortByscore(STUDENT stu, STUDENT stu1){
    return stu.score > stu1.score;
}
//把姓名后加高富帅(回调函数)
void sortByscoreGood(STUDENT * stu);
void sortByscoreGood(STUDENT * stu){
       strcat((*stu).name, "高富帅");
}
//分数加5
void sortByscoreAdd(STUDENT * stu);
void sortByscoreAdd(STUDENT * stu){
    (*stu).score += 5;
    if ((*stu).score >= 100) {
        (*stu).score = 100;
    }
}

//查找成绩 > 90的
typedef void (*SO)(STUDENT * stu);

void checkStudentsScore(STUDENT * stu, int count,SO p);
void checkStudentsScore(STUDENT * stu, int count,SO p){
    for (int i = 0; i < count; i++) {
        if ((*(stu + i)).score > 90) {
            //回调
            p(stu + i);
        }
    }

}

//回调函数的核心就是函数指针当作函数的参数
typedef BOOL (*SORTP)(STUDENT,STUDENT);
void sortOfStudent(STUDENT * stus,int count,SORTP p);
void sortOfStudent(STUDENT * stus,int count,SORTP p){
    BOOL needNext = YES;
    for (int i = 0; i < count - 1 && needNext == YES; i++) {
        needNext = NO;
        for (int j = 0; j < count - 1 - i; j++) {
            if (p(stus[j],stus[j + 1])) {
                needNext = YES;
                STUDENT tem = (*(stus + j));
                (*(stus + j)) = (*(stus + j + 1));
                (*(stus + j + 1)) = tem;
            }
        }
    }
}

void printOf(STUDENT * stus,int count);
void printOf(STUDENT * stus,int count){
    for (int i = 0; i < count; i++){
        printf("%10s %c %d %.2f\n",(*(stus + i)).name,(*(stus + i)).sex,(*(stus + i)).age,(*(stus + i)).score);
    }
}

int maxValue(int a, int b);
int maxValue(int a, int b){
    return a > b ? a : b;
}
int sumValue(int a, int  b);
int sumValue(int a, int  b){
    return a + b;
}
int minus(int a, int b);
int minus(int a, int b){
    return a - b;
}
int product(int a, int b);
int product(int a, int b){
return a * b;
}
//typedef int(*PFUN)(int ,int);
int printValue(int a, int b, PFUN p);
int printValue(int a, int b, int (*p)(int, int)){
    //回调
    return p(a, b);
}

void printHello();
void printHello()
{
    printf("hello");
}

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

//函数编译完成也会被存储,存储在内存的代码区
//函数名是函数在代码区的首地址
//    printf("%p",maxValue);
    //0x100000f00[代码区]
   
    //int (*)(int a, int b)指针的类型
    //p 指针的变量名
//    int (*p)(int a, int b) = maxValue;
//    //使用函数指针调用函数
//    int result = p(10, 15);
//    printf("result = %d",result);
   
    //指针变量p能够指向有一个整形返回值,两个整形参数的函数
//    int (*p)(int a, int b) = sumValue;
//    int result = p(5, 6);
//    printf("%d",result);
   
    //空类型的指针
//定义一个可以指向上述函数的函数指针,并通过函数指针实现调用该函数。
//    void (*p)() = printHello;
//    p();
   
//定义两个函数,一个求最大值,一个求和,输入max或sum分别求3,5的最大值或和(提示,定义一个函数指针,根据输入内容指向不同函数,最后一次调用完成)。
//    int a = 3, b = 5;
//    int (*p)(int a, int b) = NULL;
//    printf("请输入你要求的内容:");
//    char inputStr[20] = {0};
//    scanf("%s",inputStr);
//    if (strcmp(inputStr, "max") == 0) {
//        p = maxValue;
//    }else if(strcmp(inputStr, "sum") == 0){
//        p = sumValue;
//    }else {
//        printf("你输入的错误!");
//        //return 0;//提前结束
//        exit(0);//结束程序
//    }
//    int result  = p(a, b);
//    printf("%d",result);
   
    //回调函数(CallBack)是指由调用方自己实现,
    //设计模式[高内聚,低耦合]
//    int a = 5, b = 10;
//    int result = printValue(a, b, product);
//    printf("result = %d",result);
   
//    STUDENT stu[5] = {
//        {"zhangshan",‘M‘,24,89.6},
//        {"yangzi",‘W‘,23,81.22},
//        {"huangshang",‘M‘,26,88.1},
//        {"shangwen",‘W‘,22,79.52},
//        {"wenshang",‘M‘,25,98.01}
//    };
////    sortOfStudent(stu, 5,sortByscore);
//    checkStudentsScore(stu, 5 , sortByscoreAdd);
//    printOf(stu,5);
   
    return 0;
}

时间: 2024-10-04 01:04:51

Obj-c1[基础用法]的相关文章

Cocos数据篇[3.4](6) ——SQLite3数据库基础用法

[唠叨] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也是得心应手. 本文介绍一下SQLite3数据库的基础用法:增删改查. PS:另外对于SQLite的可视

Cocos2d-x数据篇06:SQLite3数据库基础用法

尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=2430 [前言] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也

vue的基础用法

基础用法(没有搭建框架就在html文件里演示) 一. Hello World起步 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello World</title> </head> <body> <!-- 模板 --> <div id="app&qu

sass基础用法

sass基础用法 SASS是什么 传统的CSS是一种单纯的描述性样式文件,然而SASS可以对CSS进行预编译处理. 在SASS源码中可以使用变量.函数.继承等动态语言的特性,并且可以编译成CSS文件. 安装与使用 安装 由于sass是ruby写的,所以想要使用sass就需要安装ruby环境.然后再使用gem安装sass. 输入下面的命令进行安装sass: gem install sass 可以使用sass -v命令查看sass的版本. 使用 新建一个后缀名为.scss源码文件,就可以编辑sass

游标基础用法

Create PROCEDURE P_InsertSubject@SubjectId intASDECLARE rs CURSOR LOCAL SCROLL FORselect studentid from student where StudentGradu = 1OPEN rsFETCH NEXT FROM rs INTO @tempStudentIDWHILE @@FETCH_STATUS = 0BEGINInsert SelSubject values (@SubjectId,@temp

sed命令基础用法

    sed(Stream EDitor)简介 sed是一个流编辑器编辑器,本身是一个管道命令,主要以行为单位处理文本文件,可以将数据进行替换.删除.新增.选取等特定工作:sed并不会处理文本文件本身,而是每当处理一个文件时,按顺序逐行读取到模式空间(内存)中,而后在模式空间中完成编辑,把编辑的结果输出到屏幕上,接着处理下一行,反复操作,直到文件结尾. 模式空间:将读取的内容放在内存中的一块区域编辑,这些内存空间就称为模式空间 格式: sed [options]    'Address Com

2017.04 vue学习笔记---08表单控件绑定---基础用法

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> div{ margin-bottom: 30px; } </style> <script src="js/vue.js"></script> <

UIButton的最基础用法

UIButton的最基础用法 UIButton (1) 创建显示一个Button      //演示UI中按钮类UIButton使用 //需求: 想要在界面上显示一个按钮 //解决:   使用UIButton按钮类  //<1>创建按钮,一般需要指定按钮的风格 //系统样式的按钮:  UIButtonTypeSystem //如果创建带图片的: 一般选用UIButtonTypeCustom //圆角矩形: ios7不再使用UIButtonTypeRoundedRect //UIButtonTy

Vue组件基础用法

前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需,使用不同的组件来拼接页面.这种开发模式使前端页面易于扩展,且灵活性高,而且组件之间也实现了解耦.本文将详细介绍Vue组件基础用法 概述 组件是一个自定义元素或称为一个模块,包括所需的模板.逻辑和样式.在HTML模板中,组件以一个自定义标签的形式存在,起到占位符的功能.通过Vue.js的声明式渲染后,

sed基础用法

在linux系统中,sed的文本处理无疑是一个非常强大的工具,用好sed可以使我们工作效率成倍提升,下面就小结一下sed的常用命令参数,只需关注常用的即可. 选项参数 首先来一发sed --help了解一下常用的参数 # sed --help Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]... -n  忽略打印输出,一般是避免默认输出,只有我们处理的那一行文本会显示在屏幕上 -e  在命令行进行文本的处理