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 ...
随机推荐
- Vue之使用umy-ui库的u-table解决 el-table当存在大量数据时,界面操作卡顿。
提示:一.下面的1. 对应 二.下面的1.:2.则对应2. 错误排查:在使用中如果出现:readding 'style' undefined类似错误的, 可以先排查 u-table中height的值引 ...
- RepOpt-VGG:梯度参数化的开创
本文来自公众号"AI大道理" YOLov6的量化问题: yolov6在结构中大量使用了重参数结构,导致数据分布过差,PTQ精度急剧下降.另外,重参数化结构网络无法直接使用Q ...
- leetcode-36-有效数独,leetcode-37-求解9*9数独
#include <iostream> #include <vector> #include <utility> #include <unordered_ma ...
- [CSP-S2019] Emiya 家今天的饭
洛咕 题意:原题面见链接,简单来说就是给出一个\(n*m\)的矩阵,每一行代表同一种烹饪方法,每一列代表同一种食材,\(a_{i,j}\)表示使用第i种烹饪方法第j种食材能做出多少种菜,要求至少做一道 ...
- C语言中的转义字符\b的含义
\b的含义是,将光标从当前位置向前(左)移动一个字符(遇到\n或\r则停止移动),并从此位置开始输出后面的字符(空字符\0和换行符\n除外) 参考: https://blog.csdn.net/har ...
- 简单友好的 Python 任务调度库
schedule :https://github.com/dbader/schedule 该项目人性化的 API 设计,让开发者仅用几行代码就能轻松实现定时任务.它不依赖任何第三方库,全部代码也就一个 ...
- sql server 与mysql差异(innodb)
MySQL SQL SERVER CHAR_LENGTH(str) LEN(character_expression) CONCAT(str1,str2,...) str1+str2 INSERT(s ...
- ASP.NET WebAPI 单元测试-UnitTest
xUnit.Net
- 学python有了这些书你还担心有什么学不会的吗
百度云盘:Python高级编程PDF高清完整版书籍免费下载 提取码:bn9d 内容简介 · · · · · · <Python高级编程>通过大量的实例,介绍了Python语言的最佳实践和 ...
- centos7.4离线安装.NETCore3.1 环境
1.在有网的情况下把离线包下载到电脑上sudo yum install --downloadonly --downloaddir=/home/mjb/soft/dotnet-sdk-3.1 dotne ...