600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 对C语言 结构数组 指向结构变量的指针 指向结构数组的指针

对C语言 结构数组 指向结构变量的指针 指向结构数组的指针

时间:2020-01-27 06:57:38

相关推荐

对C语言  结构数组 指向结构变量的指针  指向结构数组的指针

一、结构数组的定义

数组的元素可以是结构类型的。结构数组的每一个元素都是具有相同的结构类型的下标结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。

如:一个班的学生的档案,一个车间职工的工资等。

struct stu{Int num;char *name;char sex[20];float score;}boy[5];

定义了一个结构数组boy,共有5个元素,boy[0]~boy[4].每个数组元素都有struct stu的结构形式。对数组结构可以做初始化赋值。

#include<stdio.h>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<stdio.h>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<stdio.h>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;ps<boy+5;ps++){printf("%d\t%s\t%c\t%f\n",ps->num,ps->name,ps->sex,ps->score);}return 0;}

***可以看出结构指针变量可以访问结构变量或结构数组元素的成员,但是不能使他指向一个成员。也就是说,不允许取一个成员的地址来赋予它。

错误的:ps = &boy[1].sex;

正确的:ps = boy;(赋予数组首地址) ps = &boy[0];(赋予0号元素首地址)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。