C语言小板凳(2)

(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是一个函数指针,他指向函数返回值为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







郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。