一、定义和使用Struct
Struct是C语言中构建复杂数据类型的基础。它可以包含多个不同的变量,并且可以用一个变量名引用它们。定义一个struct需要先定义它的类型名,再定义结构体的变量。
/* 定义struct类型 */ struct Person { char name[20]; int age; int id; }; /* 定义struct变量 */ struct Person someone;
在定义一个struct变量时,可以直接为其中的变量赋初值。
/* 直接为变量赋初值 */ struct Person someone = {"Tom", 20, 123456};
访问struct变量的成员可以使用“.”运算符。
/* 访问某一成员 */ printf("Name: %s\n", someone.name);
二、Struct和指针
使用struct指针可以更方便地访问和修改struct的成员。在定义struct类型时,加上“*”可以定义一个指向该类型的指针。
/* 定义指向Person类型的指针 */ struct Person *ptr;
访问struct变量的成员可以使用“->”运算符。
/* 使用指针访问变量 */ ptr = &someone; printf("Age: %d\n", ptr->age);
同时,使用指针可以更方便地传递struct类型的参数。
/* 传递指针作为参数 */ void display(struct Person *p) { printf("ID: %d\n", p->id); } display(&someone);
三、Struct和数组
数组可以存储多个相同类型的数据,struct也可以存储多个相同类型的数据。使用数组和struct可以构建更复杂的数据结构。
/* 定义存储多个Person类型的数组 */ struct Person group[3]; /* 初始化数组 */ group[0] = {"Tom", 20, 123456}; group[1] = {"John", 21, 234567}; group[2] = {"Mary", 22, 345678}; /* 输出数组中第二个元素的名字 */ printf("Name: %s", group[1].name);
可以使用指针遍历数组中的元素,并访问其成员。
/* 使用指针遍历数组并输出其成员 */ for(int i=0; iname); }
四、Struct和文件读写
Struct可以使用文件进行读写操作,以此实现文件的持久化存储。
/* 打开文件 */ FILE *fp; fp = fopen("test.txt", "w"); /* 定义并写入struct */ struct Person someone = {"Tom", 20, 123456}; fwrite(&someone, sizeof(struct Person), 1, fp); /* 关闭文件 */ fclose(fp);
可以使用fread函数从文件中读取struct数据。
/* 打开文件 */ fp = fopen("test.txt", "r"); /* 读取文件并输出内容 */ struct Person temp; fread(&temp, sizeof(struct Person), 1, fp); printf("Name: %s\nAge: %d\nID: %d\n", temp.name, temp.age, temp.id); /* 关闭文件 */ fclose(fp);
五、Struct的高级应用
Struct还有很多高级应用,例如在struct中嵌套其他struct、使用typedef定义新类型、使用联合体构建新类型等等。
/* 嵌套struct */ struct Date { int year; int month; int day; }; struct Student { char name[20]; struct Date birth; }; /* 使用typedef定义新类型 */ typedef struct { char name[20]; int age; } Person; /* 使用联合体构建新类型 */ union Data { int count; float weight; }; struct Item { int type; union Data info; };
原创文章,作者:ZBPPU,如若转载,请注明出处:https://www.506064.com/n/368578.html