为了使规模较大的程序更便于修改和使用,常常将结构体类型的声明放在一个头文件中,这样在其他源文件中如果需要使用该结构体类型则可以用 #include 命令将该头文件包含到源文件中。
1、结构体变量引用
#include<stdio.h>
struct Product /*声明结构*/
{
char cName[10]; /*产品的名称*/
char cShape[20]; /*形状*/
char cColor[10]; /*颜色*/
int iPrice; /*价格*/
char cArea[20]; /*产地*/
};
int main()
{
struct Product product1; /*定义结构体变量*/
printf("please enter product's name\n"); /*信息提示*/
scanf("%s",&product1.cName); /*输出结构成员*/
printf("please enter product's shape\n");/*信息提示*/
scanf("%s",&product1.cShape); /*输出结构成员*/
printf("please enter product's color\n");/*信息提示*/
scanf("%s",&product1.cColor); /*输出结构成员*/
printf("please enter product's price\n");/*信息提示*/
scanf("%d",&product1.iPrice); /*输出结构成员*/
printf("please enter product's area\n");/*信息提示*/
scanf("%s",&product1.cArea); /*输出结构成员*/
printf("Name: %s\n",product1.cName); /*将成员变量输出*/
printf("Shape: %s\n",product1.cShape);
printf("Color: %s\n",product1.cColor);
printf("Price: %d\n",product1.iPrice);
printf("Area: %s\n",product1.cArea);
return 0;
}
输出结果:
2、结构体类型初始化
#include<stdio.h>
struct Student /*学生结构*/
{
char cName[20]; /*姓名*/
char cSex; /*性别*/
int iGrade; /*年级*/
} student1={"HanXue",'W',3}; /*定义变量并设置初始值*/
int main()
{
struct Student student2={"WangJiasheng",'M',3};/*定义变量并设置初始值*/
/*将第一个结构体中的数据输出*/
printf("the student1's information:\n");
printf("Name: %s\n",student1.cName);
printf("Sex: %c\n",student1.cSex);
printf("Grade: %d\n",student1.iGrade);
/*将第二个结构体中的数据输出*/
printf("the student2's information:\n");
printf("Name: %s\n",student2.cName);
printf("Sex: %c\n",student2.cSex);
printf("Grade: %d\n",student2.iGrade);
return 0;
}
输出结果:
3、结构体数组
输出学生信息
#include<stdio.h>
struct Student /*学生结构*/
{
char cName[20]; /*姓名*/
int iNumber; /*学号*/
char cSex; /*性别*/
int iGrade; /*年级*/
} student[5]={{"WangJiasheng",12062212,'M',3},
{"YuLongjiao",12062213,'W',3},
{"JiangXuehuan",12062214,'W',3},
{"ZhangMeng",12062215,'W',3},
{"HanLiang",12062216,'M',3}}; /*定义数组并设置初始值*/
int main()
{
int i; /*循环控制变量*/
for(i=0;i<5;i++) /*使用for进行5次循环*/
{
printf("NO%d student:\n",i+1); /*首先输出学生的名次*/
printf("Name: %s, Number: %d\n",student[i].cName,student[i].iNumber); /*使用变量i做下标,输出数组中的元素数据*/
printf("Sex: %c, Grade: %d\n",student[i].cSex,student[i]. iGrade);
printf("\n"); /*空格行*/
}
return 0;
}
输出结果:
4、指向结构体变量的指针
一个指向变量的指针表示的是变量所占内存中的起始地址。如果一个指针指向结构体变量,那么该指针指向的是结构体变量的起始地址。
#include<stdio.h>
struct Student /*学生结构*/
{
char cName[20]; /*姓名*/
int iNumber; /*学号*/
char cSex; /*性别*/
int iGrade; /*年级*/
}student={"SuYuQun",12061212,'W',2}; /*对结构变量进行初始化*/
int main()
{
struct Student* pStruct; /*定义结构体类型指针*/
pStruct=&student; /*指针指向结构体变量*/
printf("-----the student's information-----\n"); /*消息提示*/
printf("Name: %s\n",(*pStruct).cName); /*使用指针引用变量中的成员*/
printf("Number: %d\n",(*pStruct).iNumber);
printf("Sex: %c\n",(*pStruct).cSex);
printf("Grade: %d\n",(*pStruct).iGrade);
return 0;
}
输出结果:
注意:声明结构的位置可以放在 main 函数外也可以放在 main 函数内。
5、指向结构体数组的指针
#include<stdio.h>
struct Student /*学生结构*/
{
char cName[20]; /*姓名*/
int iNumber; /*学号*/
char cSex; /*性别*/
int iGrade; /*年级*/
} student[5]={{"WangJiasheng",12062212,'M',3},
{"YuLongjiao",12062213,'W',3},
{"JiangXuehuan",12062214,'W',3},
{"ZhangMeng",12062215,'W',3},
{"HanLiang",12062216,'M',3}}; /*定义数组并设置初始值*/
int main()
{
struct Student* pStruct;
int index;
pStruct=student;
for(index=0;index<5;index++,pStruct++)
{
printf("NO%d student:\n",index+1); /*首先输出学生的名次*/
/*使用变量index做下标,输出数组中的元素数据*/
printf("Name: %s, Number: %d\n",pStruct->cName,pStruct->iNumber);
printf("Sex: %c, Grade: %d\n",pStruct->cSex,pStruct->iGrade);
printf("\n"); /*空格行*/
}
return 0;
}
输出结果:
6、结构体做为函数参数
#include<stdio.h>
struct Student /*学生结构*/
{
char cName[20]; /*姓名*/
float fScore[3]; /*分数*/
}student={"SuYuQun",98.5f,89.0,93.5f}; /*定义变量*/
void Display(struct Student stu) /*形参为结构体变量*/
{
printf("-----Information-----\n"); /*提示信息*/
printf("Name: %s\n",stu.cName); /*引用结构成员*/
printf("Chinese: %.2f\n",stu.fScore[0]);
printf("Math: %.2f\n",stu.fScore[1]);
printf("English: %.2f\n",stu.fScore[2]);
/*计算平均分数*/
printf("Average score:%.2f\n",(stu.fScore[0]+stu.fScore[1]+stu.fScore[2])/3);
}
int main()
{
Display(student); /*调用函数,结构变量作为实参进行传递*/
return 0;
}
输出结果:
7、包含结构的结构
结构体嵌套
#include<stdio.h>
struct date /*时间结构*/
{
int year; /*年*/
int month; /*月*/
int day; /*日*/
};
struct student /*学生信息结构*/
{
char name[30]; /*姓名*/
int num; /*学号*/
char sex; /*性别*/
struct date birthday; /*出生日期*/
}student={"SuYuQun",12061212,'W',{1986,12,6}}; /*为结构变量初始化*/
int main()
{
printf("-----Information-----\n");
printf("Name: %s\n",student.name); /*输出结构成员*/
printf("Number: %d\n",student.num);
printf("Sex: %c\n",student.sex);
printf("Birthday: %d,%d,%d\n",student.birthday.year,
student.birthday.month,student.birthday.day);/*将成员结构体数据输出*/
return 0;
}
输出结果: