认识结构体(1.0版)

认识结构体

结构体的类型与变量

在C语言中,结构体类型名称和结构体变量名称是不同的,它们有不同的作用和用法。结构体类型名称是用来定义结构体的类型的,它由关键字struct和结构体的标识符组成,例如

struct Student {

    char name[20];

    int age;

    float score;

};

而结构体变量名称则是用来声明和定义实际的结构体变量的,它由结构体类型名称和具体的变量名组成,例如:

在上面的例子中,"struct Student"就是结构体的类型名称,它定义了一个名为Student的结构体类型,包含了name、age和score三个成员变量。

而结构体变量名称则是用来声明和定义实际的结构体变量的,它由结构体类型名称和具体的变量名组成,例如:

struct Student stu1;

因此,结构体类型名称用于定义结构体类型,而结构体变量名称用于声明和定义实际的结构体变量。需要注意的是,结构体类型名称和结构体变量名称可以不同。

结构体变量的定义

struct date {
    int day;
    int month;
    int year;
};d1={11,2,2019},d2;

相当于在struct date类型定义了d1和d2两个变量。d1进行了初始化。通俗来讲,我们可以把struct date看成是int,float等类型,而d1和d2就是我们经常设的i。

用typedef重命名
typedef struct date {
    int day;
    int month;
    int year;
} Date;

Date d1 = {11, 2, 2019};

与用struct定义没什么太大区别,不同点就是给结构体加了个别名Date,在后期修改中,我们可以直接改变别名而不用全文修改,在这两个代码看不出来,但我们学到单片机时就会非常实用,大多用第二种方式定义。还有一个不同点就是可以不用关键字struct。

例如下面代码

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

int main() {
    struct Person p1; // 使用关键词struct
    p1.age = 25;
    strcpy(p1.name, "John");

    // 其他操作
    return 0;
}
typedef struct {
    int age;
    char name[20];
} Person;

int main() {
    Person p1; // 不需要使用关键词struct
    p1.age = 25;
    strcpy(p1.name, "John");

    // 其他操作
    return 0;
}

注意:像Date d1 = {11, 2, 2019};,我们也可以放到主函数里。

结构体变量成员的引用

基本认识

首先看下列代码

#include <stdio.h>

typedef struct date {
    int day;
    int month;
    int year;
} Date;

int main() {
    Date d;//定义
    d.month = 12;  // 引用结构体变量中的 month 成员
    printf("Month: %d\n", d.month);
    return 0;
}

d.month 指的是类型是struct Date的Date d中的变量month,若定义为Date s;,则变成s.month(不管d还是s,l里面还有很多的成员,要用 .引出来),所以不管是d还是s都是数据类型为Date的变量。

提醒一点,不可以写成下面的样子。在C语言中,结构体成员不能在结构体内部直接初始化。

typedef struct date {
    int day;
    int month;
    int year=3;
} Date;

此外, 想要打印整个变量名不能使用printf(" %d\n", Date d1);,而是写成printf(“Date: %d/%d/%d\n”, d1.day, d1.month, d1.year);。输出输入,赋值等操作都必须访问各个成员。对于相同类型的成员可以整体赋值。

指针访问

当使用指针访问结构体成员时,可以使用"->"运算符。下面是一个简单的C语言代码示例,展示了如何使用指针访问结构体成员:

#include <stdio.h>
// 定义一个结构体
struct Date {
    int day;
    int month;
    int year;
};

int main() {
    // 声明一个结构体变量
    struct Date d1 = {12, 4, 2022};
    
    // 声明一个指向结构体的指针,并将其指向d1
    struct Date *ptr = &d1;
    
    // 使用指针访问结构体成员并打印其值
    printf("Day: %d\n", ptr->day);
    printf("Month: %d\n", ptr->month);
    printf("Year: %d\n", ptr->year);
    
    return 0;
}

在这个示例中,我们声明了一个Date类型的结构体变量d1,并初始化了它的成员。然后,我们声明了一个指向Date结构体的指针ptr,并将其指向d1。最后,我们使用ptr->day、ptr->month和ptr->year来访问结构体成员,并打印它们的值。

结果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值