C语言学习笔记(浙大翁恺版)第十一周 结构(3)

本文详细介绍了C语言中的typedef关键字用于创建自定义数据类型,提高代码可读性,并通过实例展示了如何定义和使用自定义类型。此外,还讲解了联合(union)的概念,说明其内部成员共享存储空间的特性,以及如何利用联合来查看整数的字节表示。文章还提供了一个实际示例,演示如何通过联合获取并打印整数的十六进制字节。
摘要由CSDN通过智能技术生成

目录

11.3.1 类型定义

自定义数据类型(typedef)

 举几个例子:

11.3.2 联合

存储

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


11.3.1 类型定义

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

自定义数据类型(typedef)

  • C语言提供了一个叫做typedef的功能来声明一个已有的数据类型的新名字
  • typedef int Length;
    
    这样就使得Length成为了int类型的别名,
    此时Length可以代替int出现在变量定义和参数声明的地方,如
    
    Length a=10;
    Length number[10];

声明新的类型的名字,作为某种类型的别名,大大改进了可读性 

typedef 原来的类型名 新类型名

如果原类型名很长,只需要看最后的单词来判断

原来:
struct Adate{
    int month;
    int day;
    int year;
};
新:
typedef struct Adate{
    int month;
    int day;
    int year;
} Date;//这个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 联合

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

union AnElt{
    int i;
    char c;
}elt1,elt2;

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

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

  • 存储

    • 所有的成员共享一个空间
    • 同一时间只有一个成员是有效的
    • 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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值