结构体指针
不可以这样定义:
应该这样定义:加上指针,因为指针是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() ; }