C语言复习之结构体指针 ; 函数指针

结构体指针

不可以这样定义:
在这里插入图片描述
应该这样定义:加上指针,因为指针是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() ;   

} 


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值