嵌入式开发学习日志Day17

发布于:2025-05-10 ⋅ 阅读:(13) ⋅ 点赞:(0)

第十一章  结构体与共用体

一、结构体

1、结构体

一般形式     【struct   标识符】

结构体中的标识符一般首字母大写;

【.】结构体成员运算符;  优先级 1 级    结合方向:从左至右;

【->】:指向结构体成员运算符;

eg:



#include<stdio.h>
struct Student 
{
    int id;
    char name[10];
    float score; 
};      //此处的分号不能省略;也可以在分号前定义变量,为全局变量;
int main(void)
{
    struct Student s;
    s.id = 1;       //为id进行赋值;
    strcpy(s.name,"zhnagsan");
    s.score = 99;

    struct Student s1;
    s1 = s;    //结构体的变量之间可以赋值
    printf( " %d  %s  %f\n",s.id,s.name,s.score);
    return 0;
}

结构体的作用:将不相关的东西打包封装在一起,方便使用;

注意:

        结构体不可以整体赋值,因为类型不匹配;

eg:结构体的初始化;

程序:

                  注意:初始化时,次序不能颠倒;

                               不写的时候,默认为0;(称为结构体的部分初始化);

 2、结构体在内存中所占的字节数

2.1 内存对齐

        将变量按照4的整数倍进行存放,用空间换取时间,提高CPU的运行效率;

2.2结构体对齐原则

 1、默认按照计算机位数对齐;64位电脑中   64 / 8 = 8,最终的大小必须为8的倍数;

2、从结构体的成员中查找最大字节的成员,最终以此成员大小对齐;

3、把所有的成员按照声明依次存放入内存,偏移量  /  sizeof(成员),必须整除;

 练习:

eg:(1)将结构体中的元素逆序输出:

                用swap函数并调用; 

 (2)对结构体里面的元素进行排序:(分别用成绩,名字进行排序)

程序:

二、共用体

        所有的成员公用相同的内存空间;4个字节;

定义:

注意:

         在公共体中成员进行访问时,仅最后一位赋值是有效的;

        总是从空间的起始位置进行共享的;

        所有成员的首地址相同;

eg:判断电脑是大端存储还是小端存储:

三 、枚举类型

定义:如果一个变量只有几种可能的值,则可以定义为枚举类型。所谓“枚举”是指将变量的值-一列举出来,变量的值只限于列举出来的值的范围内。

        和整型兼容的数据类型;

 四、用typedef定义类型

给已有的数据类型,取一个别名;

int INT;            //定义一个变量;
typedef int INT;    //给int型取别名为INT;

第12章 位运算

一、位运算

位运算必须是整型或者与整型相兼容的数据类型,(枚举类型可以)

        按位与“&”:指定位清零;

        安慰或“|”:指定位变一;

        按位异或“^”:指定为翻转,其他位不变;

        按位取反“~”(单目运算符):按位取反:

        左移“<<”:eg:p <<1————p向左移一位,最高位丢失,最低位补零;

        左移“>>":eg:p >>1————p向右移一位,最低位丢失,最高位补零;(注意右移时是否有符号);有符号右移为算数右移,无符号右移为逻辑右移;

 eg:将p的第0位,第三位,第六位变为1;

程序:


网站公告

今日签到

点亮在社区的每一天
去签到