C语言小板凳(2)

来源:互联网 发布:mac 触摸板 鼠标 反向 编辑:程序博客网 时间:2024/03/29 20:07
(1)typedef高档用法:
typedef void (*sighandler_t)(int);
盖住 typedef不看 ,再简单不过,sighandler_t就是一个函数指针,指向的函数接受一个整型参数并返回一个无类型指针
加上typedef之后sighandler_t就是一种新的类型,就可以像int一样地去用它,不同的是它声明是一种函数指针,这种指针指向的函数接受一个整型参数并返回
这种宏定义常用来定义使用回调函数的函数的参数,看例程序2。

例程序1:

#include <stdio.h>#include <string.h>typedef void (*point_func)(int);void func1(int i){printf("\n i=%d\n\n",i);}int main(){point_func my_func;my_func = func1;my_func(367);}

运行结果:i=367

例程序2:涉及回调函数的用法

#include <stdio.h>#include <string.h>typedef int (*point_func)(int,int);//point_func是一种指向返回值是int型,输入参数是两个int型的函数的类型int my_add(int i,int j){return (i+j);}void func1(point_func add) //回调函数:func1函数通过指针参数来调用其他函数{int a=300,b=99,tmp;tmp = add(300,99);printf("\n sum = %d\n\n",tmp);}int main(){func1(my_add);return 0;}

运行结果:
sum = 399

(2)圆括号()的结合性比*的结合性高

int *function();//function是一个函数,返回值是int型指针int (*function)();//function是一个函数指针,他指向函数返回值为intint *(*function)();//function是一个函数指针,返回值是int型指针

(3)指针数组 & 数组指针【关键:方括号[]的结合性比*的结合性优先级要高 】
指针数组:用来存放指针的数组,宾语是数组。
int *point[];//存放(指向整型变量的)指针的数组
数组指针指向某种类型数组的指针,宾语是指针。
int (*point)[];//指向整型数组的指针

举例:

#include <stdio.h>#include <string.h>int main(){char i;char ch1[]="Hello";char ch2[]="World!";//指针数组const char *table[]={"red","yellow","blue","green"};//将长短不一的字符串用数组来管理:即将这些字符串的起始地址放到数组里面来//数组指针const char (*point)[];//指针数组操作for(i=0;i<4;i++)printf("\n color=%s\n",table[i]);//数组指针操作:可指向不同长度的数组point = ch1;printf("\n ch1[]=%s\n",point);point = ch2;printf(" ch2[]=%s\n\n",point);return 0;}

运行结果:


(4)凌乱笔记
①/**/和//注释符在编译的时候会被替换成空格
②#和define之间可以有空格
③“\”接续符同样适用于注释,其后和下一行开始都不能有空格
④任何一个字符都可以用转义字符来表示:

八进制表示ASIIC值:\ddd

printf("\102"); //打印B

十六进制表示ASIIC值:\xhh

printf("\x42");//打印B







0 0