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——自定义数据类型的更多相关文章

  1. 编程C语言进阶篇——自定义数据类型:共同体

    什么是"自定义数据类型"?顾名思义,就是用户可以随时在程序中自行定义新的数据类型.自定义数据类型时需要设置数据类型的名称及其成员.数据类型成员各属性的设置方法等同于变量设置时相应属 ...

  2. 编程C语言进阶篇——自定义数据类型:结构体

    一.结构体 定义方法: 结构名 变量名 特点: 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用"<","=="等运算符,如果使用则需要对运算符 ...

  3. C 语言中的关键字 - 数据类型、数据修饰符及逻辑结构

    C 语言中有 32 个关键字.这是留个编译器用的特殊字符串,用户不可以使用. 特殊关键字 sizeof 和 return 是 C 语言中的两个特殊关键字. sizeof sizeof 用于计算变量所占 ...

  4. 通过SQL Server自定义数据类型实现导入数据

    写在前面 在看同事写的代码时看到了SQL Server中可以自定义数据类型,而且定义的是DataTable类型的数据类型. 后我想起了以前我们导入数据时要么是循环insert写入,要么是SqlBulk ...

  5. hadoop的自定义数据类型和与关系型数据库交互

    最近有一个需求就是在建模的时候,有少部分数据是postgres的,只能读取postgres里面的数据到hadoop里面进行建模测试,而不能导出数据到hdfs上去. 读取postgres里面的数据库有两 ...

  6. OSG 自定义数据类型 关键帧动画

    OSG 自定义数据类型 关键帧动画 转自:http://blog.csdn.net/zhuyingqingfen/article/details/12651017 /* 1.创建一个AnimManag ...

  7. Oracle存储过程-自定义数据类型,集合,遍历取值

    摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇 ...

  8. 【C语言】06-基本数据类型

    C语言有丰富的数据类型,因此它很适合用来编写数据库,如DB2.Oracle都是C语言写的. C语言的数据类型大致可以分为下图中的几类: 回到顶部 一.变量 跟其他语言一样,C语言中用变量来存储计算过程 ...

  9. Oracle自定义数据类型 1

    原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...

  10. Cassandra在CQL语言层面支持多种数据类型

    Cassandra在CQL语言层面支持多种数据类型. CQL类型 对应Java类型 描述 ascii String ascii字符串 bigint long 64位整数 blob ByteBuffer ...

随机推荐

  1. oracle学习之undo读一致性及undo表空间设置大小

    1.一致性读和事务 一个事务开始以后,分配undo段头事务表和undo块,事务表指向undo块,数据块中有事务槽,底下有数据行,数据块事务槽中事务ID指向事务表,事务表指向undo块,数据块事务槽也指 ...

  2. Windows下使用Fortran读取HDF5文件

    需要用Fortran读取HDF5格式的GPM IMERG卫星降水文件,在已经安装HDF5库(参见VS2019+ Intel Fortran (oneAPI)+HDF5库的安装+测试 - chinago ...

  3. 大规模并行处理器编程实战_原书第2版_pdf

    链接:https://pan.baidu.com/s/1c8ez8dCTz5bUQchwhXAF7w 提取码:tc1f

  4. composer更新报错

    在用composer安装Yii2的扩展插件时,报错: [UnexpectedValueException] Could not parse version constraint <=2.*: I ...

  5. sprinboot多个子模块下 依赖包没有找到 解决方案

    最近因为在使用springboot开发项目,在开发过程中,发现自己的子模块导入通用的模块 在启动中 说找不到这个类 百度下 说我要在pom文件下 pulus 插件 那里 加上这段代码 <conf ...

  6. 34.MySQL 架构

    一主两从 双机热备 原理:

  7. mybatis获取参数值的方式

     示例: 总结:  

  8. abc285h题解

    考虑容斥,强制要求\(k\)个数为完全平方数,系数为\((-1)^k*C_n^k\)(因为我们要从\(n\)个数选出\(k\)个数作为完全平方数).则在唯一分解\(p_1^{e_1}...p_n^{e ...

  9. drf从入门到飞升仙界 07

    认证组件 ## 认证组件逻辑 # 1.登录认证的限制: - 访问接口,有的需要登陆后才能访问,有的接口,不登录就能访问 # 2.准备: -User表 : 存储用户名,密码 -UserToken表:存储 ...

  10. javaSE-验证码生成

    一.使用Math类的radom() 方法 //生成验证码 String verifcationCode = ""; for (int i = 0; i <= 5; i++) ...