【 C 】结构体 与 typedef
目录
结构体
定义结构体
访问结构体成员
typedef
typedef使用实例
typedef vs #define
#define使用实例
结构体
先简单看下结构体的概念与用法:
转载:结构体
C 数组允许定义可存储相同类型数据项的变量,结构体是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
结构体用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:
- Title
- Author
- Subject
- Book ID
定义结构体
为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:
struct tag {
member-list
member-list
member-list ...
} variable-list ;
tag 是结构体标签。
member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。
variable-list 结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。
下面是声明 Book 结构体的定义方式:
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} book;
在一般情况下,tag、member-list、variable-list 这 3 部分至少要出现 2 个。
以下为实例:
//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//同时又声明了结构体变量s1 //这个结构体并没有标明其标签
struct
{
int a;
char b;
double c;
} s1;
//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//结构体的标签被命名为SIMPLE,没有声明变量
struct SIMPLE
{
int a;
char b;
double c;
};
//用SIMPLE标签的结构体,另外声明了变量t1、t2、t3
struct SIMPLE t1, t2[20], *t3;
//也可以用typedef创建新类型
typedef struct
{
int a;
char b;
double c;
} Simple2;
//现在可以用Simple2作为类型声明新的结构体变量
Simple2 u1, u2[20], *u3;
在上面的声明中,第一个和第二声明被编译器当作两个完全不同的类型,即使他们的成员列表是一样的,如果令 t3=&s1,则是非法的。
上面这句话的意思是第一个声明的结构体和第二个声明的结构体是完全不同的结构体,即使它们的成员列表一样。既然是完全不同的结构体类型,那么struct SIMPLE t1, t2[20], *t3;定义的指向结构体struct SIMPLE类型的指针t3当然不能被赋值为其他结构体类型的地址。也就是说, t3=&s,是非法的。当然,t3 = &t1;则是合法的。
访问结构体成员
为了访问结构的成员,我们使用成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。您可以使用 struct 关键字来定义结构类型的变量。
注意:结构体成员的访问运算符是一个点而已,不包括那个括号。
下面的实例演示了结构的用法:
#include <stdio.h>
#include <string.h>
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main( )
{
struct Books Book1; /* 声明 Book1,类型为 Books */
struct Books Book2; /* 声明 Book2,类型为 Books */
/* Book1 详述 */
strcpy( Book1.title, "C Programming");
strcpy( Book1.author, "Nuha Ali");
strcpy( Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;
/* Book2 详述 */
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Zara Ali");
strcpy( Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;
/* 输出 Book1 信息 */
printf( "Book 1 title : %s\n", Book1.title);
printf( "Book 1 author : %s\n", Book1.author);
printf( "Book 1 subject : %s\n", Book1.subject);
printf( "Book 1 book_id : %d\n", Book1.book_id);
/* 输出 Book2 信息 */
printf( "Book 2 title : %s\n", Book2.title);
printf( "Book 2 author : %s\n", Book2.author);
printf( "Book 2 subject : %s\n", Book2.subject);
printf( "Book 2 book_id : %d\n", Book2.book_id);
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Book 1 title : C Programming Book 1 author : Nuha Ali Book 1 subject : C Programming Tutorial Book 1 book_id : 6495407 Book 2 title : Telecom Billing Book 2 author : Zara Ali Book 2 subject : Telecom Billing Tutorial Book 2 book_id : 6495700
typedef
转载:typedef
C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:
typedef unsigned char BYTE;
在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如:
BYTE b1, b2;
按照惯例,定义时会大写字母,以便提醒用户类型名称是一个象征性的缩写,但您也可以使用小写字母,如下:
typedef unsigned char byte;
您也可以使用 typedef 来为用户自定义的数据类型取一个新的名字。例如,您可以对结构体使用 typedef 来定义一个新的数据类型名字,然后使用这个新的数据类型来直接定义结构变量,如下:
typedef使用实例
#include <stdio.h>
#include <string.h>
typedef struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} Book;
int main( )
{
Book book;
strcpy( book.title, "C 教程");
strcpy( book.author, "Runoob");
strcpy( book.subject, "编程语言");
book.book_id = 12345;
printf( "书标题 : %s\n", book.title);
printf( "书作者 : %s\n", book.author);
printf( "书类目 : %s\n", book.subject);
printf( "书 ID : %d\n", book.book_id);
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
书标题 : C 教程
书作者 : Runoob
书类目 : 编程语言
书 ID : 12345
typedef vs #define
#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:
- typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
- typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。
下面是 #define 的最简单的用法:
#define使用实例
#include <stdio.h>
#define TRUE 1
#define FALSE 0
int main( )
{
printf( "TRUE 的值: %d\n", TRUE);
printf( "FALSE 的值: %d\n", FALSE);
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
TRUE 的值: 1
FALSE 的值: 0
【 C 】结构体 与 typedef相关推荐
- c语言用typedef定义结构体,C语言结构体定义 typedef struct
c语言规范,定义结构体: typedef struct ANSWER_HEADER { u8 u8Type; u8 u8Code; u32 u32TimeStamp; struct ANSWER_HE ...
- 【C语言】结构体定义 typedef struct 用法详解和用法小结
结构体定义 typedef struct 用法详解和用法小结 文章目录 结构体定义 typedef struct 用法详解和用法小结 0. 前言 1. 首先:在C中定义一个结构体类型要用typedef ...
- 结构体和typedef
c语言的结构体使用方法: 1. 第一种方法: 声明 struct Person {float weight;float height; } 使用 struct Person lloyd; lloyd. ...
- C++自学12:结构体(struct/typedef)
定义结构体需要使用关键字struct修饰 struct MyStruct1 { int a;int c; }; (重要)下面声明了4个东西,分别是 1.结构体User 2.User指针类型的指针p1 ...
- c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const
十二.结构体 (1)结构体定义和使用 基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型. 参考视频:https://www.bilibili.com/video/BV1et411b ...
- 结构体与typedef关键字
先引入例题: 有typedef关键字的 设有以下说明语句:typedef struct stu{ int a;float b;} stutype; 则下面叙述中错误的是( D ). A.struct是 ...
- 结构体定义 typedef struct 用法详解和用法小结
typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便. 具体区别在于: 若struct node{ }这样来定义结构体的话.在定义 node 的结构体变量时,需要这 ...
- c语言结构体定义和使用typedef,结构体定义typedef struct 用法详解
typedef是类型定义的意思,typedef struct是为了使用这个结构体方便. 在了解typedef之前我们先来了解一下什么是结构体类型: C++提供了许多种基本的数据类型(如int.floa ...
- struct与typedef 结构体定义
结构体的基本定义方法有三种: struct 结构体名 变量名; struct 结构体名 变量名 = { 成员1值, 成员2值... }; 定义结构体时顺便创建变量; 这三种的具体代码如下: /* -- ...
最新文章
- djandgo model id
- 计算数组的逆序对个数
- 关于hbase的read操作的深入研究 region到storefile过程
- iOS之开发中一些相关的路径以及获取路径的方法
- leetcode hot100(第二部分) + python(c++)
- 负压式爬壁机器人_一种负压吸附式仿生爬壁机器人的制作方法
- idea中使用git直接提交本地写好的代码
- 由一道题目引发的为稳定与不稳定的排序思路
- java定长池,java线程池源码学习
- 电路分析基础笔记(静态电路+动态电路)
- python能开发微信公众号吗_用python如何开发微信公共帐号?
- 通过虚拟机安装Ubuntu系统到移动硬盘
- uni-app H5实现扫码登录功能
- 磨金石教育摄影技能干货分享|什么是序列摄影?它让摄影更加深刻
- 计算机信息系统安全管理的主要原则有哪些,网络系统安全性设计原则有哪些
- halcon算法库中各坐标系,位姿的解释及原理
- matlab画多组数据折线图_使用Origin绘制不相关多组数据折线图的方法
- 如何验证JDK和JRE安装成功
- SPM12 核磁数据预处理 傻瓜攻略
- 又一所985大学改考408!中国海洋大学计算机专硕
热门文章
- python文件替换一行_python基础_文件操作实现全文或单行替换的方法
- html里字号rem,html中的em和rem到底该如何使用,自适应效果中如何确定文字大小/字号?...
- mysql galaxy_优化mysql
- 手机超广角拍摄软件_桂林好的拍摄短视频手机软件
- er图主码外码怎么看_霸屏了!因为这个老师,广科er纷纷表示要转专业了
- 信号与系统 2022 春季学期第一次作业-作业题目准备
- 第十七届智能车竞赛英飞凌专题培训 ——英飞凌无刷电机驱动专题
- 深度学习中图片数据增强方法
- 利用mem数组完成MM32 的 MicroPython中UART1的(REPL)的交互
- AD5933使用外部时钟获得更低的分析频率