首页 > 其他 > 详细

自定义类型--结构体

时间:2021-04-21 17:29:02      阅读:44      评论:0      收藏:0      [点我收藏+]
结构体的基础知识

结构是一些值得集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量

1. 结构体类型的声明

技术分享图片

技术分享图片
技术分享图片

2. 结构体的自引用

在结构体中包含一个类型为该结构体本身的成员是否可以呢?

技术分享图片

对结构体类型的重命名
技术分享图片
把struct stu 简化成--mei

## 以下这两种写法都可以

1.struct stu s1;
2.mei s2;

3.结构体变量的定义和初始化

有了结构体类型,那如何定义变量,其实很简单
技术分享图片
技术分享图片
打印输出
技术分享图片

4.结构体内存对齐

计算结构体的大小

struct stu {
    char c1;
    int a;
    char c2;
};
struct stu2 {
    char c1;
    char c2;
    int a;
};
int main() {
    struct stu s1 = { 0 };
    struct stu2 s2 = { 0 };
    printf("%d", sizeof(s1));
    printf("%d", sizeof(s2));
    return 0;
}

技术分享图片
为什么会是这个结果呢???
stu和stu2里面的成员变量大小都一模一样,为什么两个结构体的大小不一样呢?,那么我们来看看结构体在内存中是如何存放的。

技术分享图片
技术分享图片
例题二

struct stu3 {
    double d;
    char c;
    int i;
};
struct stu4 {
    char c1;
    struct stu3 s3;
    double d;
};
int main() {
    struct stu3 s1 = { 0 };
    struct stu4 s2 = { 0 };
    printf("%d\n", sizeof(s1));
    printf("%d", sizeof(s2));
    return 0;
}

技术分享图片
技术分享图片

4. 修改默认对齐数

没设置之前

struct s {
    char c1;     //对齐数 1|8----1(取最小)
    double d;   //对齐数8| 8----8(取最小)
};
int main() {
    struct s s = { 0 };
    printf("%d", sizeof(s));
}

技术分享图片
设置之后:

#pragma pack(4)
struct s {
    char c1;     //对齐数1|4 -----1(取最小)
    double d;   //对齐数8|4-----4(取最小)
};
int main() {
    struct s s = { 0 };
    printf("%d", sizeof(s));
}

技术分享图片

5. 结构体传参

技术分享图片

技术分享图片

6. 结构体实现位段

技术分享图片
例题一:

struct s {
    int a : 2;
    int b : 5;
    int c : 10;
    int d : 30;   //不能大于32。因为一整型是32个比特位。
};
int main() {
    struct s stu={0};
    printf("%d", sizeof(s));
    return 0;
}

技术分享图片
技术分享图片
位段的作用:减少开辟的空间。

自定义类型--结构体

原文:https://blog.51cto.com/u_15100290/2722235

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!