typedef 的 研究与理解

2015.5.15(尴尬的时间)

看工程中博通的代码,有些c语言基础还不太了解,于是,深入了解总结了一下,如下:


一、常规用法    

//常规用法1,不谈
typedef   unsigned int  uint; 
//常规用法2,不谈
typedef   struct   l2_table
{
       ......
} l2_table_t; 


二、数组

typedef    unsigned char    mac_t[6];
//定义变量
mac_t    mr8012_mac;
//变量的使用
memset(mr8012_mac,  0,   6);
mr8012_mac[0] = 0x12;
.........
mr8012_mac[5] = 0x99;


三、指针函数

typedef  int (*person)(int height, int weight, int num);
person programmer; //也可以定义成数组,和普通变量定义一样.

//函数实现的地方
int group(char *name, int high, int weigh, int no)
{
	printf("just have a test, execute nothing.\n");
	printf("i'm %s, NO.%d,height;%d,weight:%d.\n",name,no,high,weigh);
	return 0;
}

//函数的注册
int programmer_reg(person func)
{
	programmer = func;
	.....
	.....	
}

int test5_main()
{
	(*progarmmer)(zhangsan, 170, 65, 3);
	
	//若定义成数组,可如下
	(*progarmmer[0])(zhangsan, 170, 65, 3);
	(*progarmmer[1])(lisi, 171, 64, 4);
	(*progarmmer[2])(wangwu, 170, 60, 6);
	......
	......
	
}


(1)  用gdb 调试, 每一个函数的函数名对应一个 地址,e.g      p  group   是 0x80483e4,  

       而progarmmer 是 一个 函数指针,(其就是一个指针变量, 只不过类型是该函数类型的),

       progarmmer指针变量存储的 内容是   0x80483e4;

(2)  引用 progarmmer 和引用 普通的 指针变量一样, 即 *progarmmer,但函数 指针稍不同,

      如上边代码一样,要加参数。


      注意:在函数注册中 progarmmer_reg() 中,progarmmer = func 可以,而progarmmer = &func也可以;

                 暂时没有时间研究为什么。


三、普通函数

//typedef 一个普通的函数
typedef int print_t(int no);

//定义一个普通函数的指针
print_t  *print_number = NULL;

//待注册到指针上的函数
int print(int number)
{
	printf("number==>%d<\n", number);
	return 0;
}

void func1()
{
	//简单的注册一下,一般都是会有一个专门的注册函数,此处为简便
	print_number = print;
	//注意:不知道为什么,上边的注册写成  如下语句,也可以正常执行。
	print_number = &print;
	
	//执行
	(*print_number)(2);
	
	.........
}






 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值