这篇文章记录结构体的一系列内容,从定义到使用,代码依旧来自VS环境下。
目录
一、 定义和使用结构体变量
C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。在其他一些高级语言中称为“记录”(record)。
声明一个结构体类型的一般形式为:
struct 结构体名
{成员表列}
花括号内是对成员进行说明:
类型名 成员名
“成员表列”(member list)也称为“域表”(field list),每一个成员是结构体中的一个域。成员名命名规则与变量名相同。
注意:
(1)结构体类型并非只有一种,而是可以设计出许多种结构体类型,例如:除了可以建立下面的 struct Student 结构体类型外,还可以根据需要建立名为 struct Teacher,structWorker和struct Date等结构体类型,各自包含不同的成员。
(2)成员可以属于另一个结构体类型。例如:
struct Date //声明一个结构体类型 struct Date
{
int month; //月
int day; //日
int year; //年
};
struct Student //声明一个结构体类型 struct Student
{
int num;
char name[20];
char sex;
int age;
struct Date birthday; //成员 birthday 属于 struct Date类型
char addr[30];
};
1.定义结构体类型变量
-
先声明结构体类型,再定义该类型的变量
-
在声明类型的同时定义变量
-
不指定类型名而直接定义结构体类型变量
2.结构体变量的初始化及引用
【例1】 把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。
#include <stdio.h>
int main()
{
struct Student //声明结构体类型 struct Student
{
long int num; //以下4行为结构体的成员
char name[20];
char sex;
char addr[20];
}
a={10101,"Li Lin",'M',"123 Beijing Road"}; //定义结构体变量a并初始化
printf("NO.:%1d\nname:%s\nsex:%c\naddress:%s\na.numa.name.a.sex.a.addr);
return 0;
}
注意:不能企图通过输出结构体变量名来达到输出结构体变量所有成员的值。
下面用法不正确:
printf("%s\n".student1); //企图用结构体变量名输出所有成员的值
只能对结构体变量中的各个成员分别进行输人和输出。
二、使用结构体数组
【例2】 有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输人被选人的名字,最后输出各人得票结果。
#include<string. h>
#include<stdio. h>
struct Person //声明结构体类型 struct Person
{
char name[20]; //候选人姓名
int count; //候选人得票数
}
leader[3]= {"Li",o,"Zhang",o,"Sun",o}; //定义结构体数组并初始化
int main()
{
int i,j;
char leader_name[20]; //定义字符数组
for(i=1;i<=10;i++)
{
scanf("%s",leader_name); //输人所选的候选人姓名
for(j=0;j<3;j++)
if(stremp(leader_name,leader[j].name)==0)leader[j].count++;
}
printf("\nResult:\n");
for(i=0;i<3:i++)
printf("%5s:%d\n",leader[i].name,leader[i].count);
return 0;
}
三、结构体指针
1.指向结构变量的指针
【例3】通过指向结构体变量的指针变量输出结构体变量中成员的信息。
#include<stdio. h>
#include <string. h>
int main()
{
struct Student
{
long num;
char name[20];
char sex;
float score;
};
struct Student stu_1;
struct Student*p;
p=&stu_l;
stu1.num=10101;
strcpy(stu_l.name,"Li Lin");
stu_1.sex='M';
stu_1.score=89.5;
printf("No.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n”,stu 1.num,stu1.name,stu_l.sex,stu_l.score);
printf("\nNo.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n”,(*p).num,( * p).name,( * p).sex, ( * p).score);
return 0;
}
这是结构体初阶讲解,后期会发布进阶内容,敬请期待!