C语言初级阶段6——自定义数据类型
C语言初级阶段6——自定义数据类型
阐述
1.构造数据类型:用户自己建立的数据类型(自定义数据类型)。
2.C语言中的自定义数据类型:数组类型、结构体类型、共用体类型和枚举类型。
结构体
1.定义:C语言允许用户根据自己建立的由不同类型数据组成的组合型的数据类型,我们把它称之为结构体(struct)。
2.作用:
结构体能根据用户需要来更方便的储存各种各样的信息。
3.结构体类型的声明和结构体变量的定义
声明一个结构体类型的一般形式为:
struct 结构体类型名{成员列表};
#include<stdio.h>
#include<string.h>
//结构体的定义:struct
/*struct 结构体名
{
结构成员;
}
*/
//怎么访问定义的结构体变量里面的成员 变量名.成员
//定义了一个名字叫做Student的结构
struct Student
{
int ID;
char name[10];
float score;
};
Student ab = { 2,"李四",90.9f };
//Student ab={第一个赋值给第一个定义的成员,第二个值赋值给第二个定义的成员...}
//typedef给类型取别名 #define Π 3.14 宏定义,宏的原理表示替换。
//typedef int 整型;
typedef struct Hero
{
int ATT;
char name[10];
int Def;
}hero;
//定义结构体的时候没有写结构名,那么typedef给这个结构体取别名。
typedef struct
{
int x;
int y;
}STT;
/*定义结构体的时候没写结构名,也没有用typedef取别名,
但是在}后面写了标识符,那么这几个标识符就是我们定义的该结构的变量。
那么这几个标识符就是我们定义的该结构体的变量*/
struct
{
int m;
int n;
}s1,s2,s3[10];
//结构体的嵌套
struct A
{
int f;
struct
{
int g;
}h;
};
struct CC
{
struct A f;
};
//结构体的内存计算方法
struct One
{
int a;
int b;
char c;
};
//内存对齐标准:以该结构体中最大的基本数据类型所占的内存进行对齐
struct Two
{
int a;
char b[10];
float c;
};
struct Three
{
double a;
int b;
char c[10];
};
struct Four
{
int a;
char b[10];
char c;
double d;
};
/*当结构数据成员前面有更大的数据类型所站内存,先按照顺序进行最大的数据类型进行内存分配进行对齐。
如果在最后还有比前面更大的基本数据类型所占内存,那么就按照更大的进行对齐。*/
struct Five
{
char a;
int b;
char c[10];
double d;
};
int main() {
printf("One的字节数为:%d\n", sizeof(One));
printf("Two的字节数为:%d\n", sizeof(Two));
printf("Three的字节数为:%d\n", sizeof(Three));
printf("Four的字节数为:%d\n", sizeof(Four));
printf("Five的字节数为:%d\n", sizeof(Five));
CC cc;
cc.f.h;
A fff;
fff.h.g;
hero arr[4] = {
{10,"剑圣",5},
{5,"盖伦",10},
{0,"法师",0}
};
for (int i = 0; i < 3; i++)
{
printf("%d\t%s\t%d\n", arr[i].ATT, arr[i].name, arr[i].Def);
}
s3[0] = { 1,2 };
s1 = { 1,2 };
STT tt;
hero YX1 = { 10,"剑圣",5 };
int a = 10;
int b = 20;
Student aa = { 1,"张三",60.1f};
aa.ID = 10;
strcpy(aa.name,"张三");
aa.score = 1.6f;
//aa.name="张三";这是不可以的。
return 0;
}
共用体
1.关键字:union
2.有时候想用同一段内存单元存放不同类型的变量。如:把一个整型变量、浮点型变量和字符型变量放在同一个内存单元中,它们在内存中所占字节数不同,但是共用同一段内存地址,也就是共用体。
3.也就是所有数据成员共用同一段内存的数据类型称为共用体,也称其为联合体。
4.共用体和结构体的声明、定义和成员变量引用的语法是类似的,只不过关键字不一样,以及所占内存大小有区别而已。
#include<stdio.h>
#include<string.h>
/*内存储存:共用体所有的成员共用里面最大的成员的空间,在同一个时刻只能存储一个成员的值。
只算最大的成员所占的内存,要以共用体中最大的基本数据类型所占内存进行对齐。*/
union Arr
{
int c;
char a[10];
float b;
};
int main() {
printf("Arr的字节数为:%d\n", sizeof(Arr));
return 0;
}
枚举类型
1.关键字:enum
#include<stdio.h>
#include<string.h>
/*枚举类型内存大小:就是int类型的所占内存大小
枚举的元素会有一个默认的值,是整数,第一个元素默认的值为0 第n个元素的值是第n-1个元素的值+1*/
enum Arr1
{
left,
right,
up,
down
};
int main() {
printf("Arr1的字节数为:%d\n", sizeof(Arr1));
return 0;
}
#include<stdio.h>
#include<string.h>
#include<conio.h>
enum {up='w',down='s',right='d',left='a' };
int main() {
while (1)
{
switch (_getch()) {
case up:
printf("你按了上这个键\n");
break;
case down:
printf("你按了下这个键\n");
break;
case left:
printf("你按了左这个键\n");
break;
case right:
printf("你按了右这个键\n");
break;
}
}
return 0;
}
#include<stdio.h>
#include<string.h>
#include<conio.h>
typedef enum {up='w',down='s',right='d',left='a' } Arr3;
int main() {
Arr3 a;
printf("%d\n", up);
return 0;
}
#include<stdio.h>
#include<string.h>
#include<conio.h>
typedef enum {up='w',down='s',right='d',left='a' } Arr3;
enum Arr4
{
a,b,c,d,e,f
};
int main() {
printf("%d\n", up);
printf("%d\n%d\n%d\n%d\n%d\n%d\n", a, b, c, d, e, f);
return 0;
}
#include<stdio.h>
#include<string.h>
#include<conio.h>
typedef enum {up='w',down='s',right='d',left='a' } Arr3;
enum Arr4
{
a,b,c=10,d,e,f
};
int main() {
printf("%d\n", up);
printf("%d\n%d\n%d\n%d\n%d\n%d\n", a, b, c, d, e, f);
return 0;
}
C语言初级阶段6——自定义数据类型的更多相关文章
- 编程C语言进阶篇——自定义数据类型:共同体
什么是"自定义数据类型"?顾名思义,就是用户可以随时在程序中自行定义新的数据类型.自定义数据类型时需要设置数据类型的名称及其成员.数据类型成员各属性的设置方法等同于变量设置时相应属 ...
- 编程C语言进阶篇——自定义数据类型:结构体
一.结构体 定义方法: 结构名 变量名 特点: 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用"<","=="等运算符,如果使用则需要对运算符 ...
- C 语言中的关键字 - 数据类型、数据修饰符及逻辑结构
C 语言中有 32 个关键字.这是留个编译器用的特殊字符串,用户不可以使用. 特殊关键字 sizeof 和 return 是 C 语言中的两个特殊关键字. sizeof sizeof 用于计算变量所占 ...
- 通过SQL Server自定义数据类型实现导入数据
写在前面 在看同事写的代码时看到了SQL Server中可以自定义数据类型,而且定义的是DataTable类型的数据类型. 后我想起了以前我们导入数据时要么是循环insert写入,要么是SqlBulk ...
- hadoop的自定义数据类型和与关系型数据库交互
最近有一个需求就是在建模的时候,有少部分数据是postgres的,只能读取postgres里面的数据到hadoop里面进行建模测试,而不能导出数据到hdfs上去. 读取postgres里面的数据库有两 ...
- OSG 自定义数据类型 关键帧动画
OSG 自定义数据类型 关键帧动画 转自:http://blog.csdn.net/zhuyingqingfen/article/details/12651017 /* 1.创建一个AnimManag ...
- Oracle存储过程-自定义数据类型,集合,遍历取值
摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇 ...
- 【C语言】06-基本数据类型
C语言有丰富的数据类型,因此它很适合用来编写数据库,如DB2.Oracle都是C语言写的. C语言的数据类型大致可以分为下图中的几类: 回到顶部 一.变量 跟其他语言一样,C语言中用变量来存储计算过程 ...
- Oracle自定义数据类型 1
原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...
- Cassandra在CQL语言层面支持多种数据类型
Cassandra在CQL语言层面支持多种数据类型. CQL类型 对应Java类型 描述 ascii String ascii字符串 bigint long 64位整数 blob ByteBuffer ...
随机推荐
- 常见的abd命令
https://blog.csdn.net/qq_34512207/article/details/125283285
- vue使用websoket
参考链接:https://www.cnblogs.com/qisi007/p/10213886.html export default { name: "realdetail", ...
- js过滤掉指定html标签
替换标签 var str = "<p><span style='color:#ccc;'>这是测试标签</span><span>这是测试htm ...
- 操作系统 Concurrency 并发
1. 线程和进程的区别 名称 执行点 地址空间 状态保存位置 进程 process 一个进程有多个线程,多个执行点 一个进程一个地址空间 Process Control Block 进程控制块 线程 ...
- wamp+phpstrom+Xdebuge helper(google)
一.软件安装两个软件的安装和第三个浏览器插件就不再赘述,网上有很多详细的教程,自行百度. 二.配置步骤1.wampwamp的优势在于自带xdebuge的dll文件,所以不需要在官网根据版本下载,具体位 ...
- select remove option safari 兼容
select 移除某一 option 的 javascript 公司用的代码是 var ddlPrimaryResource = document.getElementById(ddlPrimaryR ...
- docker容器生命周期管理
查看容器版本 docker version [root@node1 ~]# docker version Client: Docker Engine - Community Version: 20.1 ...
- imputation-综述文章:关于网络推理的scRNA序列插补工具基准突出了高稀疏性水平下的性能缺陷
文章题目: Benchmarking scRNA-seq imputation tools with respect to network inference highlights 中文题目: 关于网 ...
- while跟if循环
While(表达式)//循环,达成括号里的条件,一直循环执行里面的程序直到得出的值不成立后退出循环 { 循环体} 几个练习题: using System; namespace while练习2 { c ...
- drf从入门到飞升仙界 05
反序列化类校验部分源码解析 # 反序列化校验,什么时候开始执行校验 视图类中的ser.is_valid(),就会执行校验,校验通过返回True,不通过返回false # 反序列化类校验的入口: ser ...