zoukankan      html  css  js  c++  java
  • 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. 字段不是数组,并且没有地址,不能对其使用&运算符。
  • 相关阅读:
    表数据转换为insert语句
    Google Map Api 谷歌地图接口整理
    VS预生成事件命令行 和 生成后事件命令行
    C#程序开机运行
    枚举数据源化
    winform分页管理
    数据库访问驱动
    sql时间格式
    sysobjects.xtype介绍
    编码标准的多样性
  • 原文地址:https://www.cnblogs.com/qiangz/p/15790562.html
Copyright © 2011-2022 走看看