嵌入式之结构体,结构体指针

## 结构体定义
typedef struct
{
	unsigned char slot;         		//°å¿¨²Ûλ
	unsigned char port_num;     		//°å¿¨¶Ë¿ÚÊý
    unsigned char PN[30];             	//°å¿¨PNºÅ
  	unsigned char SN[30];             	//°å¿¨SNºÅ
  	unsigned char SW_Version[16];    	//°å¿¨Èí¼þ°æ±¾
  	unsigned char HW_Version[16];     	//°å¿¨Ó²¼þ°æ±¾
    unsigned char cpld_version[16];     //°å¿¨CPLD°æ±¾
	ETHENET_ADDRESS_T ethernet;
	unsigned char card_type;           //ST_CARD_TYPE_E
	unsigned char state;              //ST_CARD_STATE_E
	INT16 temp_airin;
	INT16 temp_airout;
	unsigned char sub_card_type;      //ST_SUB_CARDTYPE_E
}CARD_MUX_INFO_T;
## 声明一个结构体
CARD_MUX_INFO_T *card_info = get_card_info();

如何获取结构体card_info成员的地址

在C语言中,.->都是用于访问结构体成员的运算符,但它们的使用场景略有不同。

.运算符用于访问结构体变量的成员,而->运算符用于访问指向结构体的指针的成员。

例如,假设有以下结构体定义:

typedef struct {
    int age;
    char name[20];
} Person;

如果我们有一个Person类型的结构体变量person,我们可以使用.来访问其成员:

Person person;
person.age = 25;
strcpy(person.name, "John");

如果我们有一个指向Person类型的指针ptr,我们可以使用->来访问其成员:

Person *ptr = &person;
ptr->age = 30;
strcpy(ptr->name, "Alice");

在这个例子中,ptr->ageptr->name分别访问了指针ptr所指向的结构体的成员age和name。

因此,.用于直接访问结构体变量的成员,而->用于访问指向结构体的指针的成员。

实例补充

typedef struct
{
	UI16_T  bcm5482_rst:1,
			idt_rst:1,
			retimer_rst:1,
			si5342_rst:1,
			resv:12;
}st_retimer_card_rst_t;
st_retimer_card_rst_t retimer_rst = {0};

st_retimer_card_rst_t retimer_rst = {0};结构体等于{0}是什么意思

在C语言中,当你使用{0}来初始化一个结构体变量时,这意味着你希望将该结构体的所有成员都设置为0或者对应类型的默认值。

在给定的例子中,st_retimer_card_rst_t是一个包含多个位域成员的结构体,通过{0}初始化,将会将所有的成员都设置为0。对于位域成员,这意味着将它们的值都设置为0,对于整型成员,也会将它们的值都设置为0。

这样的初始化在很多情况下是非常有用的,特别是当你希望确保结构体的所有成员都被初始化为默认值的时候。

结构体冒号:后面是什么意思
在这个结构体定义中,冒号后面的数字表示了每个成员的位域长度。例如,bcm5482_rstidt_rstretimer_rstsi5342_rst 都是1位长的位域,而 resv 是12位长的位域。

使用位域允许你在一个结构体中定义按位存储的成员,这样可以更加节省内存空间。这在嵌入式系统或者需要精细控制内存布局的系统中会很有用。然而,需要注意的是,位域的行为在不同的编译器和平台上可能会有所不同,因此在使用时需要谨慎考虑。在这个结构体定义中,冒号后面的数字表示了每个成员的位域长度。例如,bcm5482_rstidt_rstretimer_rstsi5342_rst 都是1位长的位域,而 resv 是12位长的位域。

使用位域允许你在一个结构体中定义按位存储的成员,这样可以更加节省内存空间。这在嵌入式系统或者需要精细控制内存布局的系统中会很有用。然而,需要注意的是,位域的行为在不同的编译器和平台上可能会有所不同,因此在使用时需要谨慎考虑。

posted @ 2024-02-02 10:03  学不会xuebuhui  阅读(101)  评论(0编辑  收藏  举报
Language: javascript