🎉结构体🎉
C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
🎉定义结构🎉
为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:
struct tag { member-list member-list member-list ... } variable-list ;
tag 是结构体标签。
member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。
variable-list 结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。
例学生类:
#define _CRT_SECURE_NO_WARNINGS 1 # include<stdio.h> //描述一个学生类数据 //姓名 //年龄 //电话 //性别 //struct 结构体关键字 stu - 结构体标签 struct Stu- -结构体类型 //struct studnet //{ // char name[20]; // short age; // char tele[12]; // char sex[5]; // //}s1,s2,s3;//三个是三个全局变量 typedef struct Stu //类型重定义 { char name[20]; short age; char tele[12]; char sex[5]; }Stu; int main() { struct Stu s1; Stu s2; return 0; }
🎉结构体变量的初始化🎉
和其它类型变量一样,对结构体变量可以在定义时指定初始值。
举例:
#include <stdio.h> struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book = { "C 语言", "RUNOOB", "编程语言", 123456 }; int main() { printf("title : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n", book.title, book.author, book.subject, book.book_id); }
控制台输出:
🎉访问结构成员🎉
为了访问结构的成员,我们使用成员访问运算符(.)。
成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。您可以使用 struct 关键字来定义结构类型的变量。
下面的实例演示了结构的用法:
#include <stdio.h> typedef struct Stu { char name[20]; short age; char id[12]; }Stu; int main() { Stu s1 = { "张三",20,"15999998888"};//局部变量 Stu s2 = { "李四",35,"15588887777"}; printf("年龄: %s\n", s1.name); printf("年龄 :%d\n", s1.age); printf("学号 :%d\n", s1.id); printf("姓名 : %s\n", s2.name); printf("年龄 :%d\n", s2.age); printf("学号 :%d\n", s2.id); return 0; }
🎉指向结构的指针🎉
您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:
struct Books *struct_pointer;
现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:
struct_pointer = &Book1;
为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:
struct_pointer->title;
#include <stdio.h> #include <string.h> struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; /* 函数声明 */ void printBook( struct Books *book ); 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 的地址来输出 Book1 信息 */ printBook( &Book1 ); /* 通过传 Book2 的地址来输出 Book2 信息 */ printBook( &Book2 ); return 0; } void printBook( struct Books *book ) { 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); }
控制台输出:
Book title : C Programming
Book author : Nuha Ali
Book subject : C Programming Tutorial
Book book_id : 6495407
Book title : Telecom Billing
Book author : Zara Ali
Book subject : Telecom Billing Tutorial
Book book_id : 6495700