• 第十六次课大纲


    动态链表

    练习题:

    给15分钟写此程序,然后讲解两点内容:
    1)结构体的大小,sizeof()获取
    2)读程序讲解建立链表过程:pnew总是开辟新结点,pend总是指向最后结点,用p2和p1连接两个结点。

    3)输出链表:循环初始条件,迭代,终止条件

    共用体union

    和struct非常相似的一个东西是union,union的定义和引用与struct是非常相似的:

    union student{
        int num;
        int score;
    }s1,s2;                //3种定义类型和变量的方式:类型定义与变量定义同时定义、分开定义、省略类型名称。
    
    s1.num = 3;            //使用点.运算符进行引用共用体的成员
    s1.score = 5  /
    s2.num = 4;  
    

    union和struct不同的是:
    结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元。而共用体变量所占的内存长度等于最长的成员的长度,使用sizeof证明该观点:

    #include <stdio.h>
    int main(){
    	union Data{
    		int i;
    		float j;
    		char k;
    	};
    	union Data a;
    	printf("%d
    ",sizeof(union Data));
    	return 0;
    }
    

    上述程序输出结果是4,当把char k修改为char a[8],那么结果是8.如果改为char a[7]结果还是8,主要是考虑到字对齐。
    另外同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬时只能存放其中一个成员,而不是同时存放几个。这也就是为什么叫联合(union),那么在对共用体变量初始化,但初始化表中只能有一个常量。共用体变量中起作用的成员是最后一次被赋值的成员,在对共用体变量中的一个成员赋值后,原有变量存储单元中的值就取代。

    #include <stdio.h>
    int main(){
    	union Data{
    		int i;
    		float j;
    		char k;
    	};
    	union Data a;
    	a.i=66;
    	a.k=65;	
    	
    	printf("%d
    ",a.i);
    	printf("%c
    ",a.k);
    	printf("%f
    ",a.j);
    	
    	printf("%d
    ",sizeof(union Data));
    	return 0;
    }
    

    输出结果分别是65,A和0.0000,在该存储单元中存储的是二进制01代码,只是按照不同类型读取出来,浮点数的存放分为尾数和指数,尾数部分为0,那么指数部分再大,整个浮点数也是0.

    枚举enum

    枚举是一种数据类型,声明枚举类型用enum开头,定义也分为类型的定义和变量的定义:

    enum Weekday{sun,mon,tue,wed,thu,fri,sat};  //定义类型
    
    enum Weekday  workday,weekend;      //定义变量
    

    workday的值只能是{sun,mon,tue,wed,thu,fri,sat}中的一个,不可以被赋值为其他数据,所谓“枚举”就是指把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。
    那么sun这些值到底是什么类型的数?C编译对枚举类型的枚举元素按常量处理,故称枚举常量。不要因为它们是标识符(有名字)而把它们看作变量,不能对它们赋值。例如: sun=0; mon=1; 错误。每一个枚举常量都代表一个整数,C语言编译按定义时的顺序默认它们的值为0,1,2,3,4,5…
    sun的值为0,mon的值为1,…sat的值为6。如果有赋值语句: workday=mon; 相当于workday=1;

    枚举的用处一:可作为输入输出

    实际上,在C语言内部中,enum就是int,所以每个枚举类型的变量是可以像int一样进行输入与输出的。

    #include <stdio.h>
    enum color {red,yellow,green}; //声明一个新的数据类型color,类似int/float
    
    int main(void){
        enum color t = red;       //定义变量t,t的类型是enum color类型,t的值是red
        scanf("%d",&t);
    	printf("%d
    ",t);
        
        return 0;
    }
    

    枚举的用处二:可作为计数器

    typedef 数据类型的重命名参见听课笔记

  • 相关阅读:
    2018第一发:记一次【Advanced Installer】打包之旅
    Nginx 实现端口转发
    php支付宝手机网页支付类实例
    磁盘阵列操作实战
    错误修改/etc/fstab,导致系统无法开机
    linux 查看机器的cpu,操作系统等命令
    shell实现https登录
    linux tomcat配置https
    ArrayList和Vector以及synchronizedList
    java synchronized修饰普通方法,修饰静态方法,修饰代码块,修饰线程run方法 比较
  • 原文地址:https://www.cnblogs.com/c-programing-language/p/6723253.html
Copyright © 2020-2023  润新知