C语言数据结构预备知识模块二:结构体

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_38321889/article/details/80891331

继上面的基础模块知识之指针之后,我们对数据结构的预备知识——结构体进行记录学习。

在学习 Java之后,我们对面向对象的编程方法更为习惯,因为类Class的出现,让我们对“万事万物皆对象”的理念更为深刻的理解,这也符合人们的思维习惯,并提高开发代码的重用性,从而提高开发效率,在C语言中我们发现结构体(struct)和java中的Class有着异曲同工之妙。

1、结构体是一种新的数据结构类型,因为我们已经知道int、char、float等是基本数据类型。通过封装基本数据类型来构造结构体,并使用该结构体来定义变量。来实现类似Java中的class的类似数据结构:如下

struct Student
{
	int num;
	char name[20];
	char sex;
	float score;	
}student1,student2……;//这类似于Java中类的实例化对象student1,2

2、也可以在其他函数中通过语句“struct Student student1”来引用该结构体变量。同时,类似地,使用“.”可以访问结构体的内部属性。如下:

#include<stdio.h>
struct Student
{
	int num;
	char name[20];
	char sex;
	float score;	
};
int main ()
{
	struct Student s1;//构造实例化结构体变量
	printf("\n请输入学生的学号:\n");
	scanf("%d",&s1.num);
	printf("\n请输入学生的姓名:\n");
	scanf("%s",s1.name);
	//清空缓冲区字符
	getchar(); 
	printf("\n请输入学生的性别:\n");
	scanf("%c",&s1.sex); 
	printf("\n请输入学生的成绩:\n");
	scanf("%f",&s1.score); 
	printf("\n学生信息如下:%d, %s,%c ,%f\n",s1.num,s1.name,s1.sex,s1.score);
	return 0;
}

3.结构体数组,注意以下的数组个数的指定,和不指定数组个数的动态数组,也就是student[]={}空其代码如下:

#include<stdio.h>
struct Student
{
	int num;
	char name[20];
	char sex;
	float score;	
}stu[5]=
{
{10101,"王明辉",'n',78},
{10102,"王明",'n',78.8},
{10101,"王明辉",'n',78},
{10101,"王明辉",'n',78},
{10101,"王明辉",'n',78}
};
/*也可以不指定数组的数量,而是使用空*/
int main ()
{
	int i;
	for(i = 0;i<5;i++){
	printf("第%d个学生信息:%d,%s,%c,%f\n",i+1,stu[i].num,stu[i].name,stu[i].sex,stu[i].score);
	}
	printf("\n");
	return 0;
}

4.结构体指针。同样地,结构体也有内存地址,也可以由一个指针变量指向其地址。然后就可以实现通过指针来访问结构体各成员。如下代码:

#include<stdio.h>
struct Student
{
	int num;
	char name[20];
	char sex;
	float score;	
};
/*
指针运算符
“->”
例如:
stu.num
*p.num
stu -> num
实际上是等价的。 

*/
int main ()
{
	struct Student s1;
	struct Student *p;
	p= &s1;//指向结构体的指针变量 s 
	
	printf("请输入学生的学号:\n");
	scanf("%d",&(*p).num);
	printf("请输入学生的姓名:\n");
	scanf("%s",&(*p).name);
	//清空缓冲区字符
	getchar(); 
	printf("请输入学生的性别:\n");
	scanf("%c",&(*p).sex); 
	printf("请输入学生的成绩:\n");
	scanf("%f",&(*p).score); 
	printf("学生信息如下:%d, %s,%c ,%f\n",(*p).num,(*p).name,(*p).sex,(*p).score);
	return 0;
}

5.指针运算符“->”可以实现对结构体内对象的访问,综合来说,就是:

 stu.num
*p.num

stu -> num

实际上是等价的。 

6.结构体的嵌套

结构体的成员除了基本数据类型之外,还可以是结构体类型。这就是结构体嵌套。以下是上述例子的改写:

#include<stdio.h>

struct date
{
	int year;
	int month;
	int day;
};

struct Student 
{
	int num;
	char name[20];
	char sex;
	struct date birthday;
	float score;
} s1={10010,"want",'n',{1994,05,15},78.2};
int main()
{
printf("学生信息如下:\n学号:%d \n姓名:%s \n性别:%c \n生日:%d年 %d月 %d日 \n成绩:%f",s1.num,s1.name,s1.sex,s1.birthday.year,s1.birthday.month,s1.birthday.day,s1.score);	
 	return 0;
}

猜你喜欢

转载自blog.csdn.net/sinat_38321889/article/details/80891331