C 数组允许定义可存储相同类型数据项的变量,
结构体是 C 编程中另一种用户自定义的可用的数据类型,
它允许存储不同类型的数据项。
结构体用于表示一条记录。
12.1 结构体的定义
使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型
struct [structure tag]
{
member definition;
member definition;
...
member definition;
}[one or more structure variables];
structure tag 是可选的,每个 member definition 是标准的变量定义,比如 int i; 或者 float f;
或者其他有效的变量定义。
在结构定义的末尾,最后一个分号之前,可以指定一个或多个结构变量,这是可选的。
12.2 指向结构的指针
可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似
struct Books *struct_pointer;
可以在上述定义的指针变量中存储结构变量的地址。
为了查找结构变量的地址,把 & 运算符放在结构名称的前面
struct_pointer = &Book1;
12.3 访问结构成员
12.3.1 成员访问运算符(.)
成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。
使用 struct 关键字来定义结构类型的变量。
结构作为函数参数,传参方式与其他类型的变量或指针类似。
/*-----------------------------------------------------------------------*/
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
/*-----------------------------------------------------------------------*/
/* 函数声明 */
void printBook(struct Books book);
struct Books Book1; //声明 Book1,类型为 Book
printBook(Book1); //调用函数
/*-----------------------------------------------------------------------*/
/* 函数创建 */
void printBook(struct Books book)
{
。
。
。
}
/*-----------------------------------------------------------------------*/
12.3.2 成员访问运算符(->)
为了使用指向该结构的指针访问结构的成员,必须使用 -> 运算符
struct_pointer->title;
12.4 typedef 关键字
使用 typedef 关键字,来为类型取一个新的名字
typedef unsigned char BYTE;
在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如:
BYTE b1, b2;
可以使用 typedef 来为用户自定义的数据类型取一个新的名字。
例如,可以对结构体使用 typedef 来定义一个新的数据类型,
然后使用这个新的数据类型来直接定义结构变量,如下:
/*-----------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
/*-----------------------------------------------------------------------*/
/* 结构体 */
typedef struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} Book;
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 结构体数据的引用.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
Book book;
strcpy(book.title, "C Programming");
strcpy(book.author, "XXXXXXXX");
strcpy(book.subject, "C Programming Tutorial");
book.book_id = 20241230;
printf("Book title : %s\n", book.title);
printf("Book author : %s\n", book.author);
printf("Book subject : %s\n", book.subject);
printf("Book book_id : %d\n", book.book_id);
/*-----------------------*/
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:
12.5 typedef vs #define
#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:
typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如可以定义 1 为 ONE。
typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。
/*-----------------------------------------------------------------------*/
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/* 宏定义量 */
#define TRUE 1
#define FALSE 0
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 宏定义数据的引用.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
printf("Value of TRUE : %d\n", TRUE);
printf("Value of FALSE : %d\n", FALSE);
/*-----------------------*/
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:
非常感谢您的支持!创作不易,转发备注出处!
自用展示内容,不定期更新维护内容,让我们把 C开发 变得更专业。
十年开发基本功,常年开班收徒(一年学徒制度),每年10个名额。
商业合作加微信,项目接包与外包。