结构体、共用体、位运算

  • 一、结构体
    • 任意由程序员定义出来的新类型

  • struct Student(Google编程规范)结构体的名字首字母大写strnct Student为类型名,strnct Student为类型名

  • 结构体赋值与初始化

  • 初始化多个成员

  • 结构体传参用指针传参
    • 结构体亦可以通过指针进行传参,通过指针传参只需要8个字节,而如果通过值传递需要原有结构体那么大的空间,指针传参效率更高

  • 结构体对齐规则
    • 结构体按照其最长成员大小对齐,意味着最终的大小必须是最大成员大小的整数倍
    • 结构体成员按照结构体成员声明先后次序依次存放,并且每个成员的首字节放置的位置必须能够整除成员的字节数,从小到大依次定义,所占字节数最少
    • 如果结构体某个成员的字节数大于CPU的字节数,则最长按照CPU的字节数对齐
  • 二、共用体
    • 共用体:(公用内存)与结构体的用法很像,都需要自定义
    • 在共用体内的成员,会共同占有相同的内存空间,内存中,叠在一起。都是往前挤第一块内存空间,所以他们的地址值是一样的
    • 彼此之间,相互重叠覆盖,因此共用体中的有效元素只是最后传进去的变量的值
    • 作用:判断计算机是大端还是小段
    • 两种判断大小端的方法:
      • 通过写入一个数,读取这个数的低位判断
      • 通过共用体判断
    • 共用体变量可以作为函数参数传递
    • 通过指针传参
    • sizeof共用体的长度,按共用体中长度最大的来,但当字节数为奇数时,依然要按照两个字节对齐,提高运行效率
  • 三、枚举(enum)
    • 列举所有的可能性
    • enum 变量名
    • {
    • 枚举的元素 (为常亮)
    • };
    • 枚举与int型兼容,在计算内存时按照整形变量计算,枚举只能枚举整形或者与整形兼容的类型
  • 四、typedef 定义类型
    • 给已有的类型名起别名,eg.从此以后,INT不再是一个变量名,而是一个类型名

    • 五、位运算
      • 位运算符中除“~”以外,均为二目运算符,即要求两侧各有一个运算量
      • 运算量只能是整形或字符型的数据,不能为实型数据
      • 按位与(&)
        • 作用是指定位置清零,其他位置不变
      • 按位或(|)
        • 指定位置1,其他位置不变
      • 按位异或(^)
        • 指定位置翻转(取反)
        • 应用:不定义中间变量交换两个数
        • 将一个数与同一个数异或两次,仍会得到这个数本身
      • 取反(~)
      • 左移(<<)
        • 抛掉最高位,在后面补零
        • 左右移的优先级低于算术运算,又高于与,或的优先级
      • 右移(>>)
        • 右移与左移移动的方向相反
        • 右移运算分为算术右移和逻辑右移
        • 逻辑右移和左移一样都是补零
        • 但如果要移动的数据类型是有符号的数据类型
        • 那么补什么数要看原来的数是正数还是负数
      • 将变量的第n位置0:
        • num = num & ~(1 << n)
      • 将变量的第n位置1:
        • num = num | (1 << n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值