结构体指针做参数
struct stu stu1;
void fun(struct stu *val);
fun(&stu1);
在这里也有新手误解的地方,在函数入参这一块,传入的是一个指针,并不是说外部一定要先定义一个指针变量struct stu *xxx,然后把xxx传进去。就像下面一样。
struct stu stu1;
struct stu *p_stu1 = &stu1;
fun(p_stu1);
结构体初始化
定义变量的同时初始化
struct stu{
int age;
}stu1 = {18};
先定义在初始化
struct stu stu1,stu2;
stu1.age = 18;
stu2 = stu1; //结构体之间可以直接赋值
常用初始化
在开发过程中,一个结构体之间会存在若干成员,极其复杂。这个时候通常是将成员全部清零,然后再对需要的成员进行构造。
struct stu stu1;
memset(&stu1, 0 ,sizeof(stu1));
XXX_Init(&stu1.xxx);
2. typedef与struct
常规定义结构体类型需要用struct 结构名的方式,比较繁琐。所以结构体定义往往与typedef相结合使用。
如果使用下面这种方法,结构体名我通常是省略的,因为我已经不打算使用struct方式定义变量了。
typedef struct _stu{
int age;
}STU;
此时STU就等价于struct _stu,只不过换了个名字。
struct _stu stu1; //true
STU stu2; //true
struct STU stu3; //fail,多了struct
_stu stu4; //fail,缺少struct
3. 前置声明
在定义结构体的时候,往往会碰到这种情况,结构体成员中需要用到此结构体的类型。首先下面定义是正确的,如下:
struct stu {
int age;
struct stu stu2;
}stu1;
如果和typedef一块使用,然后用重新定义的类型。就需要前置声明。
typedef struct stu STU;
struct stu{
int age;
STU stu2;
};
这样成员变量中就不用struct加结构体名的形式定义了,直接可以用STU定义所需变量。
|