首页
登录 | 注册

C语言进阶——结构体,联合,枚举

----------------------------------------------------------我是一条划分线----------------------------------------------------------

————声明结构的形式————
*第一种
struct point{
    int x;
    int y;
    int z;
};
struct point p1,p2;//定义两个结构变量

*第二种
struct {
    int x;
    int y;
    int z;
}p1,p2;
//只定义了p1和p2这两个结构变量

*第三种 常用
struct point{
    int x;
    int y;
    int z;
}p1,p2;
//同时定义了结构名和结构变量

————结构的初始化————
struct point p1={10,5,6};//依次赋值
struct point p2={.x=5,.z=6};//没有给y赋值 自动填0

————结构成员————
* 结构的成员可以是不同类型的 数组成员必须是同一类型的
* 结构利用.运算符和名字访问成员 数组用[]运算符和下表访问成员

————结构运算————
p1=(struct point){5,10}; //相当于 p1.x=5;p2.y=10;
p1=p2; //相当于p1.x=p2.x;p1.y=p2.y;
* 数组无法做这两种运算

————结构指针————
* 和数组不同,结构变量的名字并不是结构变量的地址 必须使用&运算符
* struct date*pDate = &today;

————结构作为函数参数————
int numberofdays(struct date d)
* 整个结构可以作为参数的值传入函数
* 这时候在在函数内新建一个结构变量,并复制调用者的结构的值
* 也可以返回一个结构
* 和数组完全不同

————输入结构————
* 没有直接的方式可以一次scanf一个结构
* 当作参数传值的问题 返回的解决方案
方法①创建一个临时的结构变量,然后把这个结构返回给调用者
方法②结构指针作为参数(数组不用指针,在子函数中直接就可以操作数组中的值,特别方便)

struct date{
    int moth;
    int day;
    int year;
}myday;

struct date *p = &myday;
(*p).month = 12;//第一种 稍微麻烦一点
p->month = 12; //第二种
————结构数组————
* 结构变量的类型可以是数组
struct date dates[100];
struct date dates[]={ {1,2,3},{4,5,6} };//最外层大括号
* 结构变量的类型可以是结构
strcut dateandtime{
    struct date sdate;
    struct date time;
};
//结构中可以有结构,结构数组等,都是可以嵌套的。

----------------------------------------------------------我是一条划分线----------------------------------------------------------

——————自定义数据类型——————
* C语言提供了一个 typedef 功能来声明一个已有的数据类型的新名字
比如 typedef int Length;使Length成为int的别名
//int a 等价于 Length a
———————应用例1————————
* typedef struct Adate{
    int month;
    int day;
    int year;
}Date;

//Date是新名字 不是一个结构体实例, Date等价于 struct Adate
———————应用例2————————
* typedef struct{
    int month;
    int day;
    int year;
}Date;
//如果没有typedef 这里就是一个没有名字的结构体struct 他有一个实例叫Date;
———————应用例3————————
typedef char* Strings[10]; //Strings是10个字符串的数组

 

----------------------------------------------------------我是一条划分线----------------------------------------------------------

——————联合 union——————
*存储
    所有的成员共享一个空间
    同一时间只有一个成员是有效的
    union的大小是其最大的成员
*初始化
    对第一个成员做初始化

+:
在内存中的整数是以低位在前原理。
0x04D2在内存中就是 D2 04 00 00

----------------------------------------------------------我是一条划分线----------------------------------------------------------

* 枚举是一种用户定义的数据类型,通常枚举类型名字不真的使用,要用的是在大括号里的名字,因为它们就是常量符号。
* 枚举类型只能是int,值从零依次到n;

* enum 枚举类型名字{名字0,...,名字n}

例如 enum colors{red,yellow,green};

创建了三个常量,red的值是0,yellow是1,green是2。

套路:自动计数的枚举 enum1.png

* 声明枚举量的时候可以指定值
 * enum COLOR{RED=1,YELLOW,GREEN=5};

printf("%d",GREEN)   //结果为5
printf("%d",YELLOW)   //结果为2
枚举量是 n n+1 n+1+1 n+1+1+1 这样子排列的

* 给枚举赋不存在的值

* 人们在用枚举的时候是为了定义符号量,(给符号一个正数值),而不会把它当作枚举类型来使用,因为很(bu)少(hao)用。

 


相关文章

  • numpy C语言源代码调试(一)
    近期学习numpy,希望了解numpy内部实现机制,尝试调试numpy的源代码,特别是其中的C语言源码. 在numpy的官方网站上,有numpy的开发人员手册: https://docs.scipy.org/doc/numpy/dev/ 通 ...
  • 前言:最近一直在刷leetcode的题,用到isalnum函数,用man手册查找了一下,总共有13个相关函数如下: #include <ctype.h> int isalnum(int c); int isalpha(int c ...
  • 前言:今天在做一个小项目时,客户要求的xml,跟现在有系统要求的不一样,所以要自己重新写函数支持返回,进行简单总结,希望对大家有所帮助. 首先,使用xml函数需要链上动态库libxml2,需要在电脑上安装libxml的开发包,安装方法如下: ...
  • Vue 进阶之路(七)
    之前的文章我们对 vue 的列表输出做了介绍,本章我们来看一下 vue 的组件 component. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head ...
  • LSTM实现中文文本情感分析
    1. 背景介绍 文本情感分析是在文本分析领域的典型任务,实用价值很高.本模型是第一个上手实现的深度学习模型,目的是对深度学习做一个初步的了解,并入门深度学习在文本分析领域的应用.在进行模型的上手实现之前,已学习了吴恩达的机器学习和深度学习的 ...
  • ERP不规范,同事两行泪
    最近的很多次对外交流,都聊到了ERP建设的话题,并且无一例外的不那么让人省心,回想我这么多年走过的ERP坑坑路,在这里也写下经验和总结,希望能给正在或者即将走上ERP建设路的企业一些思考和帮助. 导读 1.几个瞎眼而普遍的案例 2.ERP的 ...

2019 cecdns.com webmaster#cecdns.com
12 q. 0.064 s.
京ICP备10005923号