C语言基础 -- 1.2结构体

struct的声明

结构体(struct)在C编程中经常用到,对于学过面向对象编程语言的同学可以不严谨的理解为只有属性没有方法的对象。结构体声明描述了一个对象的组成布局。

声明一个用于描述学生的struct:

struct student {
    char name[64];
    int age;
    int class;
}

其中student称为结构体标记。试着把struct student理解成一种类似int的变量类型。就可以开始使用这个结构体了。

struct的初始化

可以一次性初始化所有属性

struct student stu = {"austin", 19, 3};

注意:
大括号里值的顺序,要与声明结构体的属性顺序保持一致。

也可以先声明再分别初始化

struct student stu;
strcpy(stu.name, "austin");
stu.age = 19;
stu.class = 3;

关于strcpy函数

strcpy函数来自C标准库 <string.h>, 使用时不要忘记include。由于C语言中没有类似String的变量类型,我们想要使用字符串一般使用字符数组来表示,但是字符数组不能被字符串直接赋值,而strcpy函数可以解决此问题。

struct的属性声明与变量声明可以合并

struct student {
    char name[64];
    int age;
    int class;
}stu;
/* 然后就可以初始化这个结构体了
strcpy(stu.name, "austin");
stu.age = 19;
stu.class = 3; */

初始化也能写在一起

struct student {
    char name[64];
    int age;
    int class;
}stu = {"austin", 19, 3};

可以是多个变量一起初始化

struct student {
    char name[64];
    int age;
    int class;
}stu = {"austin", 19, 3},
stu2 = {"tim", 78, 100};

结构体的标记可以省略

假如你只需要一个struct student的变量stu,那么可以省略结构体的标记student:

struct {
    char name[64];
    int age;
    int class;
}stu;

这样有一个坏处,那就是你不能像 struct student stu这样声明别的变量了。

struct 的使用

定义结构体变量,访问成员时就用.
定义结构体指针,访问成员时就用

struct student {
    char name[64];
    int age;
    int class;
}stu;

// 初始化结构体变量
strcpy(stu.name, "austin");
stu.age = 19;
stu.class = 3;

struct student *stu_ptr = &stu;

// 使用 . 访问结构体变量成员
printf("age: %d\n", stu.age);
// 使用 -> 访问
printf("age: %d\n", stu_ptr->age);

使用typedef

比如有这样一个结构体:

struct student {
    char name[64];
    int age;
    int class;
}

如上述,使用此结构体时,我们这样声明变量 struct student stu。
可以用typedef关键字为struct student指定一个别名:

typedef struct student s;

上面的代码,我们将struct student指定为别名s,那么语句s stu;就等价于struct student stu;,显然更加简洁和方便。
我们可以在定义结构体时就加上typedef关键字,就可以将上面的代码合并为:

typedef struct student {
    char name[64];
    int age;
    int class;
}s;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小钱要努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值