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

一、结构数组的定义

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

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

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;
}
对C语言 结构数组 指向结构变量的指针 指向结构数组的指针_第1张图片

本例程序中定义了一个外部结构数组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;
}
对C语言 结构数组 指向结构变量的指针 指向结构数组的指针_第2张图片

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

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

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

你可能感兴趣的:(C,语言)