C语言小板凳(2)
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是一个函数指针,他指向函数返回值为int int *(*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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。