现在的位置: 首页 > 综合 > 正文

C基础

2018年02月16日 ⁄ 综合 ⁄ 共 1512字 ⁄ 字号 评论关闭

一、函数指针

//
//  main.c
//  L01Helloc
//
//  Created by zj on 14-6-1.
//  Copyright (c) 2014年 zj. All rights reserved.
//

#include <stdio.h>

void sayHello(){
    printf("Helloc C\n");
}

void sayHello1(int i){
    printf("Hello C  %d\n",i);
}

int main(int argc, const char * argv[])
{
    void (*p)();
    void (*p1)(int i);
    p = sayHello;
    p1 = sayHello1;
    p();
    p1(98);
    return 0;
}

二、Typedef关键字

//
//  main.c
//  L01Helloc
//
//  Created by zj on 14-6-1.
//  Copyright (c) 2014年 zj. All rights reserved.
//

#include <stdio.h>

typedef struct {
    int age;
} People;

void sayHello(){
    printf("Helloc C\n");
}

//代表返回值为void ,无传入参数的函数
typedef void (*Func)();


int main(int argc, const char * argv[])
{
    People p;
    p.age = 13;
    Func f = sayHello;
    f();
    
    return 0;
}

三、面向对象

//
//  main.c
//  L01Helloc
//
//  Created by zj on 14-6-1.
//  Copyright (c) 2014年 zj. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>

//Object begin>>>>>>>>>

#define ObjectField void(*onDelete)(void*);

typedef struct Object{
    ObjectField
} Object;

#define ObjectCreate(TYPE) malloc(sizeof(TYPE))

#define ObjectDelete(obj) {\
    obj->onDelete(obj);\
    free(obj);\
}

void ObjectOnDelete(void *obj){
    printf("Object on delete \n");
}

Object* ObjectInit(Object *obj){
    obj->onDelete = ObjectOnDelete;
    return obj;
}

//Object end<<<<<<<<<<<<<<<<<<<<<

typedef struct {
    ObjectField
    int age;
    void(*sayHello)();
} People;

void PeopleSayHelloc(){
    printf("Hello \n");
}

void PeopleOnDelete(void *p){
    ObjectOnDelete(p);
    printf("People on delete \n");
}

People* PeopleInit(People *p, int age){
    ObjectInit((Object *)p);
    p->age = age;
    p->sayHello = PeopleSayHelloc;
    p->onDelete = PeopleOnDelete;
    return p;
}

int main(int argc, const char * argv[])
{
    People *p = PeopleInit(ObjectCreate(People), 20);
    p->sayHello();
    ObjectDelete(p);
    return 0;
}

抱歉!评论已关闭.