| |
|
|
开发:
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图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/13 20:44:55- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |