数组的元素可以是结构类型的。结构数组的每一个元素都是具有相同的结构类型的下标结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。
如:一个班的学生的档案,一个车间职工的工资等。
struct stu
{
Int num;
char *name;
char sex[20];
float score;
}boy[5];
定义了一个结构数组boy,共有5个元素,boy[0]~boy[4].每个数组元素都有struct stu的结构形式。对数组结构可以做初始化赋值。
#include
struct stu
{
int num;
char *name;
char sex;
float score;
}boy[5] = {
{101,"shi",'w',46},
{102,"wen",'m',76},
{103,"jie",'w',89.8},
{104,"jier",'m',25},
{105,"dada",'w',65},
};
int main(int argc,char **argv)
{
int i;
int c=0;
float ave;
float s = 0;
for(i=0;i<5;i++)
{
s += boy[i].score;
if (boy[i].score < 60)
{
c+=1;
}
printf("num=%d,name=%s,sex=%c,score=%2.f\n",boy[i].num,boy[i].name,boy[i].sex,boy[i].score);
}
printf("s=%f\n",s);
ave = s/5;
printf("ave=%f\ncount=%d\n",ave,c);
return 0;
}
本例程序中定义了一个外部结构数组boy,总共5个元素,并做了初始化赋值。在main函数中用for语句逐渐累加各个元素的score,成员值存于s之中,如score的值小于60(不及格)即计数器C加1,循环完毕后计算平均成绩,并输出全班总分,平均分以及不及格人数。
一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量的值指向的是结构变量的首地址。
通过结构指针即可访问该结构变量。
结构指针变量的说明一般的格式为:
Struct stu *pstu;
访问的一般形式为:
结构指针变量->成员名
例如:(*pstu).num;
或者是:
Pstu->num;
/*
结构指针变量的具体说明和使用方法
*/
/*
本例程序中定义了一个结构体stu,定义了类型结构变量boy1并做了初始化赋值,还定义了一个指向stu类型结构的指针变量pstu。在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1,。然后在printf语句中用三种形式的输出boy1的各个成员值。
从运算结果可以看出:
结构变量.成员名
(*结构指针变量).成员名
结构指针变量->成员名
*/
#include
struct stu
{
int num;
char name[20];
char sex;
float score;
}boy1 = {102,"shi wen jie",'w',48},*pstu;
int main(int argc,char **argv)
{
pstu = &boy1;
printf("num=%d\t,name=%s\t,sex=%c\t,score=%f\n",boy1.num,boy1.name,boy1.sex,boy1.score);
printf("num=%d\t,name=%s\t,sex=%c\t,score=%f\n",(*pstu).num,(*pstu).name,(*pstu).sex,(*pstu).score);
printf("num=%d\t,name=%s\t,sex=%c\t,score=%f\n",pstu->num,pstu->name,pstu->sex,pstu->score);
return 0;
}
指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结构指针变量也可以指向结构数组的一个元素,这时的结构指针变量的值是该结构数组元素的首地址。
***ps为指向结构数组的指针变量,则ps也是指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。
/*
在程序中定义了stu结构类型的外部数组boy并做了初始化赋值。在main中定义了ps为指向stu类型的指针。在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出boy中数组中的成员值。
*/
/*
用指针变量输出结构数组
*/
#include
struct stu
{
int num;
char name[8];
char sex;
float score;
}boy[5] = {
{101,"shi",'w',65},
{102,"wen",'m',89},
{103,"jie",'w',86},
{104,"jie jie",'m',70},
{105,"hi",'m',76},
};
int main(int argc,char **argv)
{
struct stu *ps;
printf("num\tname\tsex\tscore\n");
for(ps=boy;psnum,ps->name,ps->sex,ps->score);
}
return 0;
}
***可以看出 结构指针变量可以访问结构变量或结构数组元素的成员,但是不能使他指向一个成员。也就是说,不允许取一个成员的地址来赋予它。
错误的:ps = &boy[1].sex;
正确的:ps = boy;(赋予数组首地址) ps = &boy[0];(赋予0号元素首地址)