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. 标量子查询加聚合函数sql改写一

    标量子查询的语句: select /*+ GATHER_PLAN_STATISTICS dwtest */ empno, (select count(*) from DEPT1 b where b.i ...

  2. centos 6.5 docker  安装

    https://www.cnblogs.com/zhangzhen894095789/p/6641981.html?utm_source=itdadao&utm_medium=referral

  3. vue-用户管理系统

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Win10使用打印机0x0000011b错误 如何处理(没有KB5005565补丁如何解决??)

    1.排查问题 win10连接打印机共享错误显示0x0000011b怎么解决?很多用户在更新了windows系统的最新补丁后,突然发现自己打开打印机的时候提示"无法连接到打印机,错误为0x00 ...

  5. js 判断gps是否超出设定范围

    var CKposition = { //经纬度转换成三角函数中度分表形式 rad: function (d) { return d * Math.PI / 180.0; }, // 根据经纬度计算距 ...

  6. Vite项目打包配置详解

    一:vite构建项目 配置base 1.base配置打包公共路径 打开package.json 做项目时可以不去掉 好了,在以上你构建了vite,并配置了最简单的操作后,你准备配置vite.confi ...

  7. CF319D 题解

    题意 传送门 给你一个字符串 \(S\),要求你每次找到一个最短的并且最左边的形如 \(XX\)(即由两个相同的字符串拼接而成)的子串,然后把这个字符串从 \(XX\) 变成 \(X\).问无法操作后 ...

  8. golang中自带base64编码和解码

    package main import ( "encoding/base64" "fmt" "log" ) func main() { in ...

  9. ssr next 学习记录

    预加载页面   只有生产环境才有 当页面初始化加载时,getInitialProps只会加载在服务端.只有当路由跳转(Link组件跳转或 API 方法跳转)时,客户端才会执行getInitialPro ...

  10. Little Tiger vs. Deep Monkey(hdu4815)01背包

    题:http://acm.hdu.edu.cn/showproblem.php?pid=4815 题意:已知n个题以及每个题答对的得分,给出p概率 小老虎vs小猴子答题:已知小猴子随机答题,请问老虎至 ...