第1个回答 2012-03-08
C语言中的“结构体”其实就相当于其他高级语言中的“记录”,结构体的定义方法如下:
例如:
Struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};(注意最后的分号不能省略)。
其中第一行的“student”是该结构体的名称,花括号里面的内容是结构体的成员名,这是声明结构体的一般形式。也可以在声明结构体的同时对它进行初始化,例如:
struct stu
{
int num;
char *nAME;
char sex;
float score;
}pupil[5]={
{101,"Tom",'M',45.8},
{102,"Mike",'M',62.5},
{103,"Chris",'F',92.5},
{104,"Rose",'F',87.6},
{105,"Nate",'M',58.8}
};
该代码中的“pupil[5]”称为结构体数组,它属于结构体变量,在定义该变量的同时对它进行了初始化操作。我们也可以先声明结构体,然后再对它进行初始化操作。
例如:
#include <stdio.h>
int main()
{
struct student
{
char name[8];
int age;
char sex[4];
char depart[20];
float grade1,grade2,grade3;
}a;
float wage;
char c='Y';
if(c=='Y'||c=='y')
{
printf("\nName:");
scanf("%s", a.name);
printf("Age:");
scanf("%d", &a.age);
printf("Sex:");
scanf("%s", a.sex);
printf("Dept:");
scanf("%s", a.depart);
printf("Grade1:");
scanf("%f", &a.grade1);
printf("Grade2:");
scanf("%f", &a.grade2);
printf("Grade3:");
scanf("%f", &a.grade3);
wage=a.grade1+a.grade2+a.grade3;
printf("The sum of wage is %6.2f\n", wage);
}
return 0;
}
该程序中定义了一个名为“student”的结构体,变量名为“a”,然后再后面“if”包含的符合语句中对该结构体进行初始化。在此,我们可以看出,对结构体的初始化,只能对它里面的每个成员分别初始化。
#include <stdio.h>
struct stu
{
int num;
char *name;
char sex;
float score;
}pupil[5]={
{101,"Tom",'M',45.8},
{102,"Mike",'M',62.5},
{103,"Chris",'F',92.5},
{104,"Rose",'F',87.6},
{105,"Nate",'M',58.8}
};
void avg(struct stu *ps)
{
int c=0,i;
float ave,s=0;
for(i=0;i<5;i++,ps++)
{
s+=ps->score;
if(ps->score<60) c+=1;
}
printf("s=%.3f\n",s);
ave=s/5;
printf("average=%.3f\ncount=%d\n",ave,c);
}
int main()
{
struct stu *ps;
ps=pupil;
avg(ps);
return 0;
}
此程序是关于结构体指针变量作函数参数,这样可以提高程序的运行效率,程序中我们定义了一个“stu”的结构体,变量名为“pupil[5]”,并对其进行了初始化,在主函数中定义了一个该结构体的指针ps,将pupil赋值给ps,当函数avg()调用该结构体时,用指针ps来传递pupil的地址,从而,提高了该程序的效率。
结构体与指针的结合使用,可以有效的解决现实生活中的很多问题,因此C语言中的指针和结构体应该能够熟练的掌握。本回答被网友采纳