ios函数指针

//
//  main.m
//  LessionFunctionPointer
//
//  Created by laouhn on 15/7/29.
//  Copyright (c) 2015年 池海涛. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Function.h"
int main(int argc, const char * argv[]) {
//
//    int a = 10;
//    int *p = &a;
//    printf("%d\n", *p);

    //定义结构体指针,指向结构体变量
    //结构体中包含,姓名,性别,分数,学号,新建文件实现结构体申明
//
//    Student stu1 = {"KongKong",‘w‘,19,99,"1234322"};
//    Student *sp = &stu1;
//    printf("name = %s,gender = %c,age = %d,score = %f,num = %s",sp->name,sp->Sex,sp->age,sp->score,sp->studentNum);

//   int b = maxCommon(6, 9);
//    printf("%d",b);
//    printf("%d",minCommon(6, 9));
    /**
     *  函数指针
     //函数指针
     //函数在代码区
     */
    //int (*p)(int a, int b) = maxCommon; //赋初值 maxCommon 注意,不加();

    //使用函数指针调用函数
    //int value = p(6,8);
   // printf("value = %d", value);

  //  typedef int (*PFUN)(int a, int b);

    //PFUN q = maxCommon;

    //printf("value = %d", q(3,5));

    //重定义一个无参函数
//    typedef void (*PPRINT)();
//
//    PPRINT q = printHollo;
//
//    q();

     typedef int (*PFUN)(int a, int b);
     printf("请输入数字 : 1---maxValue,2-----minValue,3---sumValue,4----subValue");

     int a = 0;
     scanf("%d",&a);
     PFUN p = NULL;
     switch (a) {
     case 1:
     p = bigNum;
     break;
     case 2:
     p = littleNum;
     break;
     case 3:
     p = sumNum;
     break;
     case 4:
     p = cutNum;
     break;
     default:
     break;
     }
     int result = p(3,5);
     printf("result == %d \n",result);
    //定义结构体数组,包含 5 个元素
    Student stu[] = {
        {"kongKong",‘w‘,27,99,"1234321"},
        {"liming",‘m‘,14,88,"432142314"},
        {"zhangxin",‘w‘,19,85,"223442113"},
        {"goushen",‘m‘,21,93,"343214"},
        {"doubi",‘w‘,45,44,"64214321"}
    };
    printStudentArray(stu,5);

    //sortByNum(stu,5);
   // sortByAge1(stu,5);
    printf("-------------------\n");
   // findStudentByScore(stu,5,addStr);
   // printStudentArray(stu,5);
    //函数回调
    //函数指针作为函数参数
    //int value = getValue(3, 5, maxCommon);
   // printf("%d",value);
    //findStudentByScore(stu,5,addStr);
    sortStudentArray(stu,5,compareByName);
    printStudentArray(stu,5);

//        printf("-------------------\n");
//    sortStudentArray(stu,5,compareByNum);
//    printStudentArray(stu,5);
    return 0;
}

//Function.h

//
//  Function.h
//  LessionFunctionPointer
//
//  Created by laouhn on 15/7/29.
//  Copyright (c) 2015年 池海涛. All rights reserved.
//

#import <Foundation/Foundation.h>

struct student{
    char name[20];
    char Sex;
    int age;
    float score;
    char *studentNum;

};
typedef struct student Student;

//函数描述:返回值为整形,有两个整形参数的函数 ,名字是max
//函数类型:int(int a,int b)---可简写为int(int,int)
//函数指针类型:int (*)(int a, int b)
//求两个数最大值
int bigNum(int a, int b);
//求两个数的最小值
int littleNum(int, int);
//求两个数的和
int sumNum(int, int);
//求两个数的差
int cutNum(int, int);
//求两个数的乘积
int  productNum(int, int);
//求两个数的商
int divide(int, int);
//求两个数的最大公约数
int maxCommon(int, int);
//求两个数的最小公倍数
int minCommon(int, int);

void printHollo();

void printStudentArray(Student *,int);
//姓名升序
void sortByName(Student *,int);
//年龄降序
void sortByAge(Student *,int);
//分数升序
void sortByScore(Student *,int);
//学号降序
void sortByNum(Student *,int);

void sortByAge1(Student[], int);
typedef int (*PFUN)(int a, int b);
int getValue(int a,int b, PFUN p);

void addStr(char *);
typedef void (*FADD)(char *);
void findStudentByScore(Student stu[],int count,void (*p)(char *));

typedef BOOL (*SORT)(Student,Student);

//姓名比较,升序
BOOL compareByName(Student stu1,Student stu2);
//年龄比较,降序
BOOL compareByAge(Student stu1,Student stu2);
//分数比较,升序
BOOL compareByScore(Student stu1,Student stu2);
//学号比较,降序
BOOL compareByNum(Student stu1,Student stu2);

//结构体数组排序

void sortStudentArray(Student stu[],int count,SORT sort);

//Function.m

//
//  Function.m
//  LessionFunctionPointer
//
//  Created by laouhn on 15/7/29.
//  Copyright (c) 2015年 池海涛. All rights reserved.
//

#import "Function.h"

//求两个数最大值
int bigNum(int a, int b)
{
    return a > b ? a : b;
}
//求两个数的最小值
int littleNum(int a, int b)
{
    return a > b ? b : a;
}
//求两个数的和
int sumNum(int a, int b)
{
    return a + b;
}
//求两个数的差
int cutNum(int a, int b)
{
    return a - b;
}
//求两个数的乘积
int  productNum(int a, int b)
{
    return a * b;
}
//求两个数的商
int divide(int a, int b)
{
    return a / b;
}
//求两个数的最大公约数
int maxCommon(int a, int b)
{
    // 9 6
    int temp = a % b ;
    while (temp != 0) {

        a = b;
        b = temp;
        temp = a % b;
    }
    return b;
}
//求两个数的最小公倍数
int minCommon(int a, int b)
{
   int temp = maxCommon(a,b);
    return (a * b) / temp;
}

void printHollo()
{
    printf("这是弄啥呢");
}

void printStudentArray(Student *sp,int count)
{
    for (int i = 0; i < count; i++) {
        printf("name = %s,gender = %c,age = %d,score = %f,num = %s \n",(sp + i)->name,(sp + i)->Sex,(sp + i)->age,(sp + i)->score,(sp + i)->studentNum);
    }

}

void sortByName(Student *a,int b)
{
    for (int i = 0; i < b - 1; i++) {
        for (int j = 0; j < b - 1 - i; j++) {
            if (strcmp((a + j)->name, (a + j + 1)->name) > 0) {
                Student temp = *(a + j);
                *(a + j) = *(a + j + 1);
                *(a + j + 1) = temp;
            }
        }
    }
}
//年龄降序
void sortByAge(Student *a,int b)
{
    for (int i = 0; i < b - 1; i++) {
        for (int j = 0; j < b - 1 - i; j++) {
            if ((a + j)->age < (a + j+ 1)->age) {
                Student temp = *(a + j);
                *(a + j) = *(a + j + 1);
                *(a + j + 1) = temp;
            }

        }
    }
}
void sortByAge1(Student str[], int a){
    for (int i = 0; i < a - 1; i++) {
        for (int j = 0; j < a - 1 - i; j++) {
            if (str[j].age < str[j + 1].age) {
                Student temp = str[j];
                str[j] = str[j + 1];
                str[j + 1] = temp;
            }
        }
    }
}
//分数升序
void sortByScore(Student *a,int b)
{
    for (int i = 0; i < b - 1; i++) {
        for (int j = 0; j < b - 1 - i; j++) {
            if ((a + j)->name > (a + j + 1)->name) {
                Student temp = *(a + j);
                *(a + j) = *(a + j + 1);
                *(a + j + 1) = temp;
            }

        }
    }
}
//学号降序
void sortByNum(Student *a,int b)
{
    for (int i = 0; i < b - 1; i++) {
        for (int j = 0; j < b - 1 - i; j++) {
            if (strcmp((a + j)->studentNum, (a + j + 1)->studentNum) < 0) {
                Student temp = *(a + j);
                *(a + j) = *(a + j + 1);
                *(a + j + 1) = temp;
            }

        }
    }
}

int getValue(int a,int b, PFUN p)
{
    return p(a,b);
}
void addStr(char *name)
{
    //*b = *b + "高富帅";
    //strcat(b,"高富帅");
    strcat(name, "高富帅");
}
void findStudentByScore(Student stu[],int count,void (*p)(char *))
{
    for (int i = 0; i < count; i++) {
        if (stu[i].score >= 90) {
            p(stu[i].name);
        }
    }
}

//姓名比较,升序
BOOL compareByName(Student stu1,Student stu2)
{
    return  strcmp(stu1.name, stu2.name) > 0 ? YES : NO;
}
//年龄比较,降序
BOOL compareByAge(Student stu1,Student stu2)
{
    return stu1.age < stu2.age ? YES : NO;
}
//分数比较,升序
BOOL compareByScore(Student stu1,Student stu2)
{
    return stu1.score > stu2.score ? YES : NO;
}
//学号比较,降序
BOOL compareByNum(Student stu1,Student stu2)
{
return  strcmp(stu1.studentNum, stu2.studentNum) < 0 ? YES : NO;
}

//结构体数组排序

void sortStudentArray(Student stu[],int count,SORT sort)
{
    for (int i = 0; i < count - 1; i++) {
        for (int j = 0; j < count - 1 - i; j++) {
            if (sort(stu[j], stu[j + 1])) {
                Student temp = stu[j];
                stu[j] = stu[j + 1];
                stu[j + 1] = temp;
            }
        }
    }
}
时间: 2024-10-07 07:19:45

ios函数指针的相关文章

iOS开发之c语言基础Lesson-11 函数指针 上课笔记 与 试题练习

main.m 文件 9 #import <Foundation/Foundation.h> 10 #import "Pointer.h" 11 ////////////////Lesson 11 函数指针 课堂笔记 与 习题练习//////////// 12 13 14 //函数指针:指向函数的指针叫做函数指针,用来存储函数的地址 15 //函数名代表函数的入口地址 16 17 18 //回调函数; 函数指针变量,存储对应的函数的地址 19 //给函数指针类型,取一个新的名

黑马程序员-----指针函数和函数指针

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ----- 第一讲 指针函数 一.指针函数的概念 所谓函数类型是指函数返回值的类型,在c语言中允许一个函数的返回值是一个指针(地址),这种返回指针的函数称为指针型函数. 二.指针函数的定义 定义指针型函数的一般形式为: int  *sum(int a,i

IOS 函数内 autorelease release

在一个有reurn 返回值的函数里 如果申请了一段内存的话(alloc 或者copy) 这个时候不能够release  只能够使用autorelease 在返回到那个被接受到的指针里,由它去进行释放!! 如果是self.obj(或者某些类对应的   SomeClass.obj)这种类型的,就需要把self.去掉(因为这样子的申请出来的内存引用计数会被retain+1了) 如果必须要有类名 SomeClass.   则需要用autorelease! IOS 函数内 autorelease rele

指针数组、数组指针、指针函数、函数指针的简介

一.指针数组:本质是一个数组,里面存放的元素是指针.比如:char *nums[10];定义了一个名称为num 长度为10的存放元素为:指向char类型数据的指针变量的数组.数组中的每一个元素都是一个指针,每一个指针都能够指向一个字符串. 在程序中举例: int main(int argc, const char * argv[]) { // 指针数组就是用来表示字符串的数组 char *strs[10]; // 声明了一个数组, 同意存储 10 个字符串 // 每个字符串 strs[0] =

指针数组、数组指针、指针函数、函数指针的简单介绍

一.指针数组:本质是一个数组,里面存放的元素是指针.例如:char *nums[10];定义了一个名称为num 长度为10的存放元素为:指向char类型数据的指针变量的数组.数组中的每个元素都是一个指针,每个指针都可以指向一个字符串. 在程序中举例: int main(int argc, const char * argv[]) { // 指针数组就是用来表示字符串的数组 char *strs[10]; // 声明了一个数组, 允许存储 10 个字符串 // 每一个字符串 strs[0] = "

函数指针实战

1.本次演示的是用函数指针指向不同的函数来实现同一个调用执行不同的结果. 2.补充点:Linux命令行默认是行缓冲的,意思就是说当我们程序printf输出的时候,Linux不会一个字一个字的输出我们的内容,而是将其缓冲起来放在缓冲区等一行准备完了再一次性把一行全部输出出来(为了效率).Linux判断一行有没有完的依据就是换行符‘\n’(windows中是\r\n,Linux中是\n,ios中是\r).也就是说你printf的再多,只要没遇到\n(或者是程序终止,或者是缓冲区满)都不会输出而会不断

单继承与多继承中的虚函数表和虚函数指针

首先,我们了解一下何为单继承,何为多继承?? 单继承:一个子类只有一个直接父类. 多继承:一个子类有两个或多个直接父类. 单继承中的虚函数表分析: 示例程序: #include <iostream> using namespace std; typedef void(*FUNC)(); class Base { public: virtual void func1() { cout << "Base::func1()" << endl; } virt

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

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

恼人的函数指针(一)

原文链接:http://www.cnblogs.com/AnnieKim/archive/2011/11/20/2255813.html 这篇是为了加深记忆所写.发现,很多知识若不经过反复的琢磨和动手实践,是很难记得住的. 1)  函数指针的初始化. 函数如下: int CompareString(const string& str1, const string& str2) { return str1.compare(str2); } 函数的初始化有两种方式: 第一种,也是最普遍的方式: