| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> AutoLeaders控制组——C语言结构体的学习笔记 -> 正文阅读 |
|
[C++知识库]AutoLeaders控制组——C语言结构体的学习笔记 |
结构体学习笔记11.1枚举当需要连续多个常量时,可以用枚举避免多个const int定义。 枚举格式:enum 枚举类型名称{名字0,……,名字n}; enum COLOR{RED,YELLOW,GREEN}; RED==0,YELLOW==1,GREEN==2 如果是连续的,可以最后定义一个number,因为正常是从0开始排,最后一个就是常量的个数: enum COLOR{RED,YELLOW,GREEN,num}; 如果需要,也可以直接给出常量的值: enum COLOR{RED=1,YELLOW,GREEN=5}; ? RED==1;YELLOW==2,GREEN==5; 注意: void f(enum color c); 作为参数时,对于C语言来说,必须要加上enum。 11.2结构11.2-1结构类型一个变量只能表示一个数据。如果要想让一个整体可以表示多个数据,就需要用到结构 1.结构类型声明:struct date { int month;//成员变量,可以是不同类型 int day; ? ?int year; };//注意加分号 //结构类型声明不是实体,它相当于告诉程序有一个结构长这个样子,像一个模板 struct date today//定义结构变量,相当于把模板给它,是个实体。(一定要加上struct) //结构变量可以有多个 与本地变量一样,如果在函数中声明结构类型,那么这个结构类型只能在函数中发挥作用。 因此一般都是在函数外声明结构类型,让其在任何地方都能用。 2.声明结构的形式:1.struct point { 2.struct { 3.struct point{ int x; int x; int x; ? ?int y; int y; int y; }; }p1,p2; } p1,p2; struct point p1,p2; p1,p2是结构变量,且 声明和定义同时完成 p1,p2都是结构变量 该结构没有名字(只要 (常用) ? p1,p2,不再用这个结构类型) 3.结构的初始化:struct date { ? ?int month; ? ?int day; ? ?int yeat; }; struct date today ={07,31,2014};//按顺序赋值 struct date thismonth ={.month=7,.year=2014};//赋所给的值,没给值的系统会赋个0 4.结构成员和结构运算:访问结构成员,用点运算符(.):p1.x,p1.y (点的左边必须是一个结构) 访问整个结构,直接用结构变量的名字 p1=(struct point){5,10};//相当于p1.x=5;p1.y=10 (括号内为强制类型转换) p1=p2;//相当于p1.x=p2.x;p1.y=p2.y 5.结构指针:结构变量的名字不是结构变量的地址,必须使用&运算符 struct date *pDate=&today; 11.2-2结构与函数结构变量可以作为函数的参数将他的值(x,y……)传入函数,这时是在函数内新建一个结构变量,并进行复制。 也可以让函数返回一个结构。 int numberOfDays(struct date d)//使用时可以不用struct date 要实现一次输入结构变量里的值,可以用以下代码: #include <stdio.h> ? struct point { int x; int y; }; struct point getStruct(void); //getStruct函数,不用参数,因为输入的结构无法通过函数改变。 //所以直接在函数中定义结构变量,最后把它输出交给外面的结构变量 int main() { struct point y={0,0}; y=getStruct(); printf("%d,%d",y.x,y.y); return 0; } ? struct point getStruct(void) { struct point p; scanf("%d",&p.x); scanf("%d",&p.y); return p; } 如果这个结构很大,传入函数时新建一个结构会费时间和空间,所以最好是传结构指针。 用->表示指针所指的结构变量的成员 ? ?struct date *p=&myday; 本来:(*p).month=12; 简便化:p->month=12; 所以就可以优化getStruct函数: struct point getStruct(struct point *p) { struct point p; scanf("%d",&p->x); scanf("%d",&p->y); return p; } 返回的是一个指针p,这个指针又能和*运算符结合,表示出原来的结构变量 11.2-3结构中的结构1.结构数组:一个数组,每个单元都是一个结构//struct date dates[100]; struct date dates[]={ ? {4,5,2005},{2.4.2005} };//最外面的括号是数组的初始化,里面的括号是结构的初始化,分别表示两个数组的值。 2.结构中的结构:一个结构中的成员变量也可以是另一个结构: struct DateAndTime { ? ?struct date sdate; ? ?struct time stime; }; 11.3联合11.3-1类型定义在定义一个结构变量是,我们总是要在变量前加上struct 结构名,减少了代码可读性。所以我们可以通过typedef来改善。 typedef可以给一个类型一个新的名字,这个名字为最后一个单词。(中间可能会有很多东西) typedef int length; 则length a,b,len;==int a,b,len; 对于结构: typedef struct ADate { //此处可以不用结构名,因为会有新名字 ? ?int month; ? ?int day; ? ?int year; } Date; //struct ADate结构的别名为Date,可以用Date替代struct ADate Date d={9,1,2005}; 11.3-2联合联合用union表示,它和struct相似: union AnElt { ? ?int i; ? ?char c; } elt1,elt2; ? elt1.i=4; elr2.c='a'; elt2.i=0xDEADBEEF; 不同之处在于: 对于struct,两个成员的值是分开的,随时可以使用其中一个; 对于union,所有成员共同使用一个内存空间。任意时间内只能存放一个成员的值 对成员的值修改会对原有的值进行覆盖: union的大小是其最大的成员,对其初始化只能是对第一个成员赋值。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 5:22:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |