1.结构体 存放多个不同类型的数据 但是是相关联的
数组 存放多个相同类型的数据

结构体是存放多个相关联的不同类型的数组

struct 定义一个结构体类型 自定义类型

2.结构体定义方式 定义类型
最通用的方式:
struct student ///student是自己取得名字
结构体定义的时候也可以初始化
3.定义结构体类型的变量
//开始使用
4.运算符 点运算符(成员运算符) .
定义的时候初始化

指针 箭头运算符 -> (只能用于结构体指针)

其他
结构类型可以包含任何已经定义好的类型
给名字比较长的类型 取一个短的外号 用起来方便
5.取别名便于联想(功能) 方便
typedef+类型名字+外号; 用的时候直接用外号
type 是类型 def 是define 宏定义的意思

6.
6.1 结构体大小 大于或等于所有的成员之和
原因 内寻对齐(速度快) 可能会牺牲一部分内存
6.2 c语言和c++结构体区别
c++可以省略struct 但c不可以 定义的时候不可以省略

6.3 关于结构体名字 大于类型的时候可以省略(匿名结构体)

/*
单引号用于字符
双引号用于字符串

数字 变量名不需要单引号或双引号

x,yxx-->坐标 定义结构体类型 返回结构体类型变量

1、定义类型
2.用自己定义的类型变量
3.为了方便用typedef给类型取别的名字

*/

测试代码:

 #include<stdio.h>
#include<string.h>
#include<time.h> #pragma warning(disable:4996)//解决在vs2013中strcpy出错,原因是strcpy安全性太低 vs弃用了 改成了strcpy_s struct student //student 自己取得名字 结构体类型的名字
{//下面的是存放的内容 称之为成员
char name[];
char sex;
int age;
char ID[];
}; //后面要加分号 表示定义结束 struct myclass //新的结构体类型
{
struct student num24[]; //
char ID; //
//student myclall summer;//不完整类型 这种就不可以 因为我们还没有定义myclass }; typedef struct myclass mc; //mc就是别名 别名为了区分 可以用大写
typedef int INT;//大写的别名 要取多个别名时 要分开写 typedef struct node
{
int x;
int y;
int mn;
}NODE,NODE1,NODE2,*PNODE; //可以在定义的同时取别名 并且可以合在一起取多个 //typedef struct node *PNODE;//定义结构体指针类型的别名
typedef struct node NODE;//结构体类型别名 //struct strudent*p 结构体指针 类型 *指针名
void putStudent(struct student*p) //用函数打印结构体 要传送结构体的地址
{
printf("name:%s,sex:%c,age:%d,ID:%s", (*p).name, p->sex, p->age, p->ID);
//*的优先级低于.运算符
//->运算符 指针成员运算符 p->name 等价于(*p).name 效果一样
} void test()
{//先定义类型 然后变量
NODE x;//x
x.mn = ;
x.x = ;//变量名和成员们可以一样
PNODE p;//相当于NODE*
//NODE* P;//指针必须赋值才能用
p = &x;
p->x = ; } int main()
{
//类型+变量名
struct student mark; //student 类型名 Mark变量名
//结构体变量.成员
mark.age = ;//使用.运算符 取得里面的成员
//mark.name = "张三";//name是字符数组 不能直接赋值 有一个函数可以对其赋值strcpy 循环
strcpy(mark.name, "Mark");//赋值 struct student Evan = {"Even",'M',,""};//定义的时候赋初值
//scanf("%s", Evan.name);
//printf("name:%s,sex:%c,age:%d,ID:%s", Evan.name, Evan.sex, Evan.age, Evan.ID);//必须一个一个输出
putStudent(&Evan);
mc danny; //用别名定义
size_t a;//这也是别名 //1.数组可不可以看成一个类型
typedef int ARR[];//定义一个一维数组类型 ARR==> 就是int[4]类型的别名
ARR arr[];//即数组的数组 ====> int arr[5][4]
//int *p---->变量名去掉之后就是类型
//int arr[4] int[4]数组类型
//二维数组 数组的数组 getchar();
return ;
}

2019-03-21  19:11:55

C++学习(二十四)(C语言部分)之 结构体1的更多相关文章

  1. 二十四、V4L2框架主要结构体分析和虚拟摄像头驱动编写

    一.V4L2框架主要结构体分析 V4L2(video for linux version 2),是内核中视频设备的驱动框架,为上层访问视频设备提供统一接口. V4L2整体框架如下图: 图中主要包括两层 ...

  2. Java开发学习(二十四)----SpringMVC设置请求映射路径

    一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...

  3. Python3.5 学习二十四

    本节课程大纲: -------------------------------------------------------------------------------------------- ...

  4. JavaWeb学习 (二十四)————Filter(过滤器)常见应用

    一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题 1 package me.gacl.web.filter; 2 3 import ja ...

  5. ElasticSearch7.3学习(二十四)----相关度评分机制详解

    1.算法介绍 relevance score(相关性分数) 算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度.Elasticsearch使用的是 term freque ...

  6. ballerina 学习二十四 监控ballerina

    ballerina 服务的监控还是比较方便的,以及集成了Prometheus Grafana Jaeger Elastic Stack 监控服务监控的集成 主要包含以下几个步骤 a. 安装docker ...

  7. python学习二十四天函数参数之默认参数

    函数参数就是向函数传递参数,可以传递一个,可以是更多个,有的参数有值,有的没有,函数可以设置默认参数,默认参数必须放参数最后面. 1,不传递参数,设置默认参数 def hello(a,b,c='123 ...

  8. Salesforce LWC学习(二十四) Array.sort 浅谈

    本篇参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort sal ...

  9. 【学习笔记】【C语言】指向结构体的指针

    1.指向结构体的指针的定义 struct Student *p;  2.利用指针访问结构体的成员 1> (*p).成员名称 2> p->成员名称 3.代码 #include < ...

  10. (C/C++学习笔记) 二十四. 知识补充

    二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...

随机推荐

  1. react router @4 和 vue路由 详解(六)vue怎么通过路由传参?

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 8.vue怎么通过路由传参? a.通配符传参数 //在定义路由的时候 { path: ' ...

  2. Android 应用基础知识和应用组件

    应用基础知识 安装到设备后,每个 Android 应用都运行在自己的安全沙箱内: Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户: 默认情况下,系统会为每个应 ...

  3. 跨域 jsonp 和 CORS 资料

    http://mp.weixin.qq.com/s/iAShnqvsOyV-Xd0Ft7Nl2Q HTML5安全:CORS(跨域资源共享)简介...ie67不要想了... http://www.cnb ...

  4. Java单例模式《二》懒汉式

    package com.study.mode; /** * 单例模式: 懒汉式,需要的时候创建. * @ClassName: SingleBean2 * @author BlueLake * @dat ...

  5. 3.BIND从服务器及缓存服务器配置

    一.域从服务器 一个域的从服务器(slave)通常是为了备份及负载均衡使用,所有这个域的信息都是由域的主服务器控制,域slave服务器启动时会从域的主服务器(master)上抓取指定域的zone配置文 ...

  6. MySQL5.6数据库8小时内无请求自动断开连接

    问题: 最近的项目中,发现Mysql数据库在8个小时内,没有请求时,会自动断开连接,这是MySQL服务器的问题.The last packet successfully received from t ...

  7. sqlserver查询父子级关系

    自上向下的查询方法,查询出自身以及所有的子孙数据: --自上往下搜索 ;with maco as ( union all select t.* from ty_Dictionary t,maco m ...

  8. 3.6 C++继承机制下的构造函数

    参考:http://www.weixueyuan.net/view/6363.html 总结: 在codingbook类中新增了一个language成员变量,为此必须重新设计新的构造函数.在本例中bo ...

  9. Buffer与Cache区别 简要说明

    Buffer –  缓冲区 写 用户写入数据存储区域 解决写入冲突           CPU-Memoury-Disk Cache – 缓存区 读 用户读取缓存数据使用 临时存储 Disk-memo ...

  10. nio的简单学习

    参考链接: http://www.iteye.com/magazines/132-Java-NIO https://www.cnblogs.com/xiaoxi/p/6576588.html http ...