IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:35:34  更:2022-10-31 11:38:37 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码