*//struct语句

struct的格式:

struct struct_tag { 
    member-list;
    member-list;
    member-list; 
    ...
};

struct_tag是结构体标签 member-list是标准的变量定义
应该注意的是 struct最后"}"后应该加分号";"

typedef创建类型别名

typedef struct
{
    int a;
    char b;
    double c; 
} test_struct;

之后用test_struct可以作为类型声明新的结构体变量

test_struct u1, u2[20], *u3;

结构体变量的初始化

#include <stdio.h>
int main(void)
{
    struct test_struct
    {
        char name[50];
        int school_id;
        int class_id;
    };
    struct test_struct _101 = {"JoeyCui",10001,2201};
}

又作

#include <stdio.h>
int main(void)
{
    struct test_struct
    {
        char name[50];
        int school_id;
        int class_id;
    }struct test_struct _101 = {"JoeyCui",10001,2201};
;
}    

注意

如果在定义结构体变量的时候没有初始化,那么后面就不能全部一起初始化了

//错误
struct test_struct _101;
_101 = {"JoeyCui",10001,2201};
//正确
_101.name = "JoeyCui";
_101.school_id = 10001;
_101.class_id = 2201;

访问结构体成员

//正确
_101.name = "JoeyCui";
_101.school_id = 10001;
_101.class_id = 2201;
//即为此

指向结构的指针

定义指向结构的指针,方式与定义指向其他类型变量的指针相似

'struct test_struct *struct_pointer;'

在上述定义的指针变量中存储结构变量的地址

'struct_pointer = &_101;'

注意:

1.结构体变量的地址就是结构体的首地址
2.结构体第一个成员的地址就是结构体的首地址

这数组类似,但不完全相同。

为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符

'struct_pointer->name;'

.和->访问结构体元素的实质是一样的,只是C语言规定:

用结构体变量来访问元素用.

用结构体变量的指针来访问元素用->

实际上在高级语言中已经不区分了,都用.
结构体变量的点号.或者->访问元素的实质是什么?其实本质上还是用指针来访问的。

代码实践

#include <stdio.h>
int main(void)
{
    struct test_struct
    {
        char name[50];
        int school_id;
        int class_id;
    };
    struct test_struct _101 = {"JoeyCui",10001,2201};
    printf("_101's name = %s\n_101's school_id =%d\n_101's class_id = %d\n", _101.name, _101.school_id, _101.class_id);
}

运行结果

运行结果

最后修改:2022 年 10 月 14 日
如果觉得我的文章对你有用,只需评论或转发支持,谢绝投喂!