结构体和结构体变量的区别

我们先来了解些结构体的定义和赋值:
image

1.结构体一般形式:

struct 结构体名
{成员列表};

2.定义结构体的方式

2.1定义结构体且先不定义结构体变量

struct Book
{
    int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
};

使用这种方法定义结构体在后面使用时需要用struct说明,这种定义方式较为繁琐,

struct Book book1;

2.2定义结构体同时定义结构体变量

struct student
{
    int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
}student1, student2;

这样我们可以直接使用student1, student2这两个变量进行操作,但在定义新的变量时还是需要使用struct关键字进行说明。

struct student stutent3;

2.3使用typedef对变量进行重定义

typedef struct student
{
    int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
}Stu;

使用这种方式可以直接用Stu定义变量

Stu student1;  //等同于struct student student1;

2.4直接定义结构体变量

struct 
{
    int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
}student1;

这种方式可以直接定义需要使用的结构体,但后续无法定义新的此结构体变量。

3.结构体的初始化

与其他变量相同,在定义变量时可对其赋值:

#include <stdio.h>
struct student
{
    long int num;
    char name[20];
    char sex;
    char addr[30];
}a = {89031, "Li Lin", 'M', "123 Beijing Road"};
 
void main()
{
    printf("NO. : %ld\nname: %s\nsex: %c\naddress: %s\n", a.num, a.name, a.sex, a.addr);

4.结构体数组

上面结构体描述了一个学生的基本信息,但往往我们需要存储很多个学生的信息,我们可以使用结构体数组进行定义:

struct student
{
    int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
};
struct student stu[3]={{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
            	       {10102,"Li Lin1", 'L', 18, 87.5, "103 Beijing Road"},
                       {10103,"Li Lin2", 's', 18, 87.5, "103 Beijing Road"}};

5.指向结构体变量的指针

#include <stdio.h>

typedef struct student
{
    int a;
    int b;
}STU;

void main()
{
    STU student = { 5,10 };
    printf("%d\n", student.a);

    STU* stu1;//定义结构体指针
    stu1 = &student;//令指针指向student结构体
    stu1->a = 6;//使用指针直接修改student中a的值
    printf("%d", student.a);
}

这里需要注意的是成员运算符"."和指向关系符(->)的区别;
成员运算符常用于引用结构体成员:

struct student
{   
    int num;
    int  age;

}student1;
student.num = 13;

指向运算符常用于结构体变量指针

struct student
{   
    int num;
    int  age;

}student1;

struct student* stu;
stu = student1;//指向结构体student1
stu->num = 13;

成员运算符"."和指向关系符(->)的关系等同:

stu->num = 13;   ==  (*stu).num = 13;
posted @ 2023-03-01 17:13  seekwhale13  阅读(571)  评论(0)    收藏  举报