• c程序设计语言 by K&R(三)结构


    一、类型定义 typedef

    typedef int Length;
    typedef char* String;
    typedef struct tnode* Treeptr;
    typedef int (*PFI)(char*, char*);
    

    二、联合 union

    一个变量可以合法地保存多种数据类型中任何一种类型的对象。

    union u_tag{
      int ival;
      float fval;
      char* sval;
    }u;
    
    1. u变量必须能保存三种类型中最大的一种。这些类型中的任何一种对象都可以赋值给u。
    2. 读取的类型必须是最后一次存入的类型。
    3. 联合只能用其第一个类型的值进行初始化。即上面的示例中只能用int进行初始化。
    4. 访问方式:
    • 联合.成员
    • 联合指针->成员

    三、位字段

    1. 什么是位字段?

    在存储空间很宝贵的情况下,可能需要将多个对象保存在一个机器字中。C语言中提供了一种直接定义和访问一个字中的位字段的能力。
    例如:

    #define KEYWORD 01
    #define EXTERNAL 02
    #define STATIC 04
    

    enum {KEYWORD = 01, EXTERNAL = 02, STATIC = 04};
    

    可替换为

    struct {
      unsigned int is_keyword : 1;
      unsigned int is_external: 1;
      unsigned int is_static: 1;
    }flags;
    
    

    :后的数字表示字段的宽度,用二进制表示。

    1. 引用方式:

    flags.is_extern = flags.is_external = 1;

    #include <stdio.h>
    #include <stdlib.h>
    
    struct {
    	unsigned int a:1;
    	unsigned int b:1;
    	unsigned int c:1;
    }flags;
    
    int main(void) {
    	flags.a = flags.b = flags.c = 1;
    	printf("%d %d %d\n", flags.a, flags.b, flags.c);
    	return 0;
    }
    
    1 1 1
    
    1. 字段不是数组,并且没有地址,不能对其使用&运算符。
  • 相关阅读:
    数据库拉取附件到本地
    Https工具类
    AES加密算法
    DES加密算法
    Http工具类,Lz提供
    接口调用工具类
    autofac生命周期入门(如何避免内存泄漏)
    ASP.NET异步
    Global Error Handling in ASP.NET Web API 2(webapi2 中的全局异常处理)
    ado.net EF学习系列----深入理解查询延迟加载技术(转载)
  • 原文地址:https://www.cnblogs.com/qiangz/p/15790562.html
Copyright © 2020-2023  润新知