【C】结构体的定义和赋值
一个结构体的基本结构如下struct 结构体名 { 成员列表; };那么定义一个结构体变量大致上可以分为两种方式1、在定义结构体的时候定义变量struct B { int b; }m; struct { int b; }m;2、在定义结构体完成后定义struct B { int b; }; struct B n; typedef struct B { int b; }TEST; TEST n; typedef struct { int b; }TEST; TEST n;结构体赋值struct Foo { int a; double d[2]; char *p; }; struct Foo foo1,foo2; foo1.d[1]3.14; foo2foo1;那么foo2.d[1]也等于3.14。定义一个结构体等于定义一个数据类型和int是一样的。定义出的结构体变量可以直接用“”赋值是内存的拷贝但是不可直接用“”判相等。联合体可直接用“”赋值不可直接用“”判相等。const修饰结构体typedef struct { int A; int *B; }STRU_A; const STRU_A m; //在ROM上 等同于 typedef struct { int const A; int *const B; }STRU_A; STRU_A m; //在RAM上定义一个结构体等于定义一个数据类型和int是一样的。用const修饰说明结构体内部变量都不可变包括指针指针不可变指针指向内容可变。上述两个定义只是在A和B的使用上相同但是两者所在区域完全不同。结构体用法中的.和-的区别相同都是二元操作符其右操作符都是成员名返回结果当结构体成员变量用。不同.的左操作符是一个结构体变量或者是“结果为结构体”的表达式。-的左操作符是一个结构体类型的指针。.和-的优先级比强制类型转换优先级高错误写法(HT_LPUART_TypeDef *)pLpUartSfr-UARTCON tmp;正确写法((HT_LPUART_TypeDef *)pLpUartSfr)-UARTCON tmp;补充// 定义结构体并为其创建同名别名C可以C不需要C的struct和class定义中隐含了typedef typedef struct Student { char name; int age; // 自引用示例 struct Student* next; // 必须使用 struct Student因为 Student 别名尚未定义 } Student; int main() { // 直接使用别名声明变量 Student stu1; // 使用自引用指针 Student* head NULL; return 0; }