C语言_0330笔记_类型自定义/联合+:typedef摆脱struct/联合uion得到整数内部的每个字节

目录

11.3.1 摆脱struct关键字:类型定义

自定义数据类型(typedef)

 用法:

 举几个例子:

 11.3.2 联合(工具 使用场景)

 概念:

存储

常见的使用场景(得到整数内部的每个字节程序)


11.3.1 摆脱struct关键字:类型定义

定义都要写struct。累不?烦不?好消息好消息,现在起,用自定义数据类型,立马解君愁!

自定义数据类型(typedef)

  • C语言提供了一个叫做typedef的功能来声明一个已有的数据类型的新名字
  • 例如

typedef int Length;
 
这样就使得Length成为了int类型的别名
此时Length可以代替int出现在变量定义和参数声明的地方,如
 
Length a=10;
Length number[10];

扫描二维码关注公众号,回复: 16512227 查看本文章

 用法:

  • 声明新的类型的名字,作为某种类型的别名,大大改进了可读性 
  • typedef 原来的类型名 新类型名
  • 如果原类型名很长,只需要看最后的单词来判断(新的名字只能是一个单词)
    • 中间所有东西 都是原来的类型
    • 原来:
      struct Adate{
          int month;
          int day;
          int year;
      }Date;//声明结构类型Adate,并定义一个结构变量Date
      新:
      typedef struct Adate{
          int month;
          int day;
          int year;
      } Date;//这个Date就是新名字
      //这样的一个struct 我mine把它命名为Date
       
      

      Date d1={9,1,2015};
      等价于
      struct Adate d1={9,1,2015};

 举几个例子:

typedef *char[10] Strings;
//Strings是10个字符串的数组类型
 
typedef struct node{
    int data
    struct node *next;
}aNode;
//aNode是新名字
 
typedef struct node aNode;
//aNode是struct node的新名字

 11.3.2 联合(工具 使用场景)

(一份 选择)

联合是和结构特别像的一个东西

但不同的是,内部的成员看似有两个,实际上你只能选一个,int or char

union AnElt{
    int i;
    char c;
}elt1,elt2;
 
elt1.i = 4;
elt2.c = 'a';
elt2.i = 0xDEADBEEF;
//先写入char类型为a,之后用0x...覆盖掉了

 概念:

  • 存储

    • 所有的成员共享一个空间
    • 同一时间只有一个成员是有效的(长江后浪推前浪)
    • union的大小是它最大的成员(如int和char,大小为(sizeof)int) 
  • 初始化时,对第一个成员做初始化

常见的使用场景(得到整数内部的每个字节程序)

#include<stdio.h>
typedef union{
    int i;//如果改为float、double等,全部替换就可以了
    char ch[sizeif(int)];
} CHI;
//起个别名为CHI
 
int main()
{
    CHI chi;
    int i;
    chi.i = 1234;
//初始化为1234,对应的十六进制为0x04D2
    for(i=0; i<sizeof(int); i++)
    {
        printf("%02hhX",chi.ch[i]);
        //以两位十六进制整数输出,不足补0
    }
    printf("\n");
//程序输出为 D2 04 00 00(小端——数电+计组)
 
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Shmily_as33/article/details/129851720