结构体指针
不可以这样定义:
应该这样定义:加上指针,因为指针是4个字节,这样的话,他的大小就确定下来了。
一个是表示结构体,一个是表示结构体的指针。
很容易理解,脑子里要有内存图。
结构体也可定义为结构体数组: (结构体是我创建出来的数据类型 当然可以有数组)
函数指针
结构体中怎么放入函数中去?
怎么定义函数指针?
Int add ( int a , int b);
首先他是一个指针,那么在内存中必然有一块空间保存它。
这里仅仅针对函数可以有函数变量名 或者 ( &函数变量名)
结构体中调用函数指针。
改进程序:
Void draw_logo_lcda ( void)
{
}
Void draw_logo_lcdb ( void)
{
}
Typedef Struct lcd_operation {
Int type ;
Void (* draw_logo_lcd) (void)
}lcd_operation, *p_lcd_operation ;
//架构体有数组 公司有两款LCD
Lcd_operation xxx_com_lcds[] = {
{ 0 , draw_logo_lcda} ,
{ 1 , draw_logo_lcda} ,
};
Int get_lcd_type(void)
{
}
p_lcd_operation get_lcd (void)
{
Int type = get_lcd_type (); //根据类型是什么 直接调用给类型实现的函数指针
}
Int main {
Int type = get_lcd_type (); //根据类型是什么 直接调用给类型实现的函数指针
Xxx_com_lcds[type].draw_logo() ; //调用结构体中 数组一类型的 的某一函数
}
另一种实现:
Void draw_logo_lcda ( void)
{
}
Void draw_logo_lcdb ( void)
{
}
Typedef Struct lcd_operation {
Int type ;
Void (* draw_logo_lcd) (void)
}lcd_operation, *p_lcd_operation ;
//架构体有数组 公司有两款LCD
Lcd_operation xxx_com_lcds[] = {
{ 0 , draw_logo_lcda} ,
{ 1 , draw_logo_lcda} ,
};
Int get_lcd_type(void)
{
}
//根据硬件的类型 直接返回一个结构体指针
p_lcd_operation get_lcd (void) //返回的直接是结构体指针 也就是return要加上地址
{
Int type = get_lcd_type (); //根据类型是什么 直接调用给类型实现的函数指针 以后硬件类型变化了 只需要修改get_lcd_type ();
Return & Xxx_com_lcds[type] ; //返回地址 只需要返回4字节的数据 返回结构体 会很多空间
}
Int main {
// Int type = get_lcd_type (); //根据类型是什么 直接调用给类型实现的函数指针
// Xxx_com_lcds[type].draw_logo() ; //调用结构体中 数组一类型的 的某一函数
p_lcd_operation lcd ;
Lcd = get_lcd () ; //指针
Lcd -> draw_logo() ;
}