23 November 2016

将 char * 命名为 string

typedef char * string;

string str = "hello";

j 是一个指向数组的指针,数组内有 20 个 char 元素

char (*j)[20];
j = (char (*)[20]) malloc (20 * sizeof(char));

j 是一个数组,数组的每个元素都是一个指针

char *j[20];

函数指针

typedef void (*func)(int);

void aFunc(int num) { xxx; }
func = aFunc;

void (*func)(int) 表示声明一个函数指针,这个指针指向一个函数,参数类型是 int,返回类型是 void。例如:

void ourFunc(int num) {
    printf("%d", num);
}

int main() {
    void (*func)(int);
    func = ourFunc;
}

最后看一个比较复杂的

void (*signal (int, void (*func) (int)))(int);

首先先看 void (*signal)(int) ,这个表示,signal 是一个函数指针,指向一个函数。熟悉 linux C 编程的话,这个在实际的信号函数中,意义就是返回该信号上一个的绑定函数

再来就是 (*signal (int, void (*func)(int))) ,表示的是 signal 的参数是两个,第一个是 int 类型,第二个也是一个函数指针

在运用中,是类似这样的

oldFunc = signal(SIGXXX, newFunc);