C語言基礎知識–結構體(一)定義和初始化
一。
struct student{
char *name; //姓名
int num; //学号
int age; //年龄
char sex; //性別
float score; //成绩
};
student 为结构体名,它包含了 5 个成员,分别是 name、num、age、sex、score。
注意大括号后面的分号;不能少,这是一条完整的语句。
二。結構體變量
定义了两个变量 student1、student2,它们都是 student 类型,都由 5 个成员组成。注意关键字struct不能少。
struct student{
char *name; //姓名
int num; //学号
int age; //年龄
char sex; //性別
float score; //成绩
}student1,student2;
如果只需要 student1、student2 两个变量,后面不需要再使用结构体名定义其他变量,那么在定义时也可以不给出结构体名,如下所示:
struct {
char *name; //姓名
int num; //学号
int age; //年龄
char sex; //性別
float score; //成绩
}student1,student2={ "Tony", 12, 10, 'B', 99.9} ;
三。訪問成員
#include <stdio.h>
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char sex; //性別
float score; //成绩
}student1,student2={ "Tony", 12, 10, 'B', 99.9} ;
void test1(void)
{
student1.name="lucy";
student1.num=10;
student1.age=11;
student1.sex='G';
student1.score=88.8;
printf("%s %d %d %c %.1f \n",student1.name,student1.num,student1.age,student1.sex,student1.score);
printf("%s %d %d %c %.1f \n",student2.name,student2.num,student2.age,student2.sex,student2.score);
}
void main(void)
{
test1();
}
輸出
lucy 10 11 G 88.8
Tony 12 10 B 99.9
四。結構體數組
#include <stdio.h>
struct person{
char *name; //姓名
int score; //成绩
}leader[3]={"zhang",1,"li",2,"wang",3};
void test2(void)
{
int i=0,sum=0;
for(i=0; i<3; i++)
{
sum += leader[i].score;
printf("%s %d \n",leader[i].name,leader[i].score);
}
printf("total sum=%d \n",sum);
}
void main(void)
{
test2();
}
輸出
zhang 1
li 2
wang 3
total sum=6
五。指向結構體的指針
struct person{
char *name; //姓名
int score; //成绩
}leader[3]={"zhang",1,"li",2,"wang",3};
void test3(void)
{
struct person tercher;
struct person *p;
p=&tercher;
tercher.name="lily";
tercher.score=60;
printf("1:%s %d \n",tercher.name,tercher.score);
printf("2:%s %d \n",p->name,p->score);
}
void main(void)
{
test3();
}
輸出
1:lily 60
2:lily 60
六。指向結構體數組的指針
struct person{
char *name; //姓名
int score; //成绩
}leader[3]={"zhang",1,"li",2,"wang",3};
/*指向結構體數組的指針*/
void test4(void)
{
struct person *p;
//求数组长度
int len = sizeof(leader) / sizeof(struct person);
printf("len=%d \n",len);
for(p=leader; p<leader+len; p++)
printf("%s %d \n",p->name,p->score);
}
void main(void)
{
test4();
}
輸出
len=3
zhang 1
li 2
wang 3