以面向对象的的思维编写代码-本质指针的运用,表驱动
函数指针
typedef struct lcd_operation {
int type;
void (*draw_logo)(void)
}lcd_operation, *p_lcd_operation;
int read_eeprom()
{
/* 0: lcd a
* 1: lcd b
*/
return 0;
}
int get_lcd_type(void)
{
return read_eeprom();
}
void draw_logo_lcda(void)
{
printf("display logo on lcd a\r\n");
}
void draw_logo_lcdb(void)
{
printf("display logo on lcd b\r\n");
}
lcd_operation xxx_com_lcds[] = {
{0, draw_logo_lcda},
{1, draw_logo_lcdb},
};
p_lcd_operation get_lcd(void)
{
int type = get_lcd_type();
return &xxx_com_lcds[type];
}
int main( void )
{
p_lcd_operation lcd;
lcd = get_lcd();
prvSetupHardware();
lcd->draw_logo();
while (1);
return 0;
}
链表
typedef struct spy {
char *name;
struct spy *next;
}spy, *p_spy;
spy A = {"A", NULL};
spy B = {"B", NULL};
spy C = {"C", NULL};
int main( void )
{
p_spy head = NULL;
A.next = &B;
B.next = &C;
C.next = NULL;
prvSetupHardware();
head = &A;
while (head)
{
printf("%s\r\n", head->name);
head = head->next;
}
while (1);
return 0;
}