struct即结构体,亦被直接称为“结构”。实际编程时,经常需要用相关的不同类型的数据来描述一个数据对象。例如,描述学生的综合信息时,需要使用学生的学号、姓名、性别、成绩以及家庭住址等不同类型的数据。但是,用相关的不同类型的数据来描述一个数据对象会使编程极为不便。因此,C语言提供了一种称为结构体(struct)的数据类型,以描述需要不同类型数据的数据对象 。结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:
struct student{
char *name; //姓名
int num; //学号
int age; //年龄
float score; //成绩
};
PS:结构体 } 后必须要加 ; 这才是完整的语句,才能构成结构体。
结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。
像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。
既然结构体是一种数据类型,那么就可以用它来定义变量。例如:
struct student stu1,st2;
定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 4 个成员组成。注意关键字struct不能少。
student 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。
struct student{
char *name; //姓名
int num; //学号
int age; //年龄
float score; //成绩
} stu1, stu2;
也可以这样定义结构体变量,将stu1,stu2写在结构体的后面。
结构体赋值和输出int main()
{
struct student stu1,st2;
//stu1.name = (char*)malloc(128*sizeof(char));
stu1.name = "liming";
stu1.num = 123456;
stu1.age = 18;
stu1.score = 100;
printf("%s,%d,%d,%f,n",stu1.name,stu1.num,stu1.age,stu1.score);
return 0;
}
输出结果:
结构体既然是一种“数据类型”,定义结构体指针就跟前面int,char等数据类型定义指针的操作相似:
struct student *p;
在内部成员进行赋值和引用上由" . “变为” -> ",应用上指针,结构体“可玩性”就变得很大
结构体指针小应用之获取并输出学生成绩:
#include#include struct student { int score; char *name; }; int main() { int n; printf("请输入班级人数:n"); scanf("%d",&n); struct student *p = (struct student *)malloc(n*sizeof(struct student));//在堆上开辟空间 int i; //获取学生成绩信息 for(i=0;i name = (char *)malloc(128); scanf("%s",p->name); printf("请输入第%d个学生的成绩:n",i+1); scanf("%d",&(p->score)); p++; } p = p-n; //回到链表头 //输出学生成绩 for(i=0;i name,p->score); p++; } system("pause"); return 0; }
以上引用大佬部分见解C语言结构体详解,C语言struct用法详解



