- 结构体初探
1、结构体是C语言中一种重要的数据类型,该数据类型由一组称为成员(或称为域,或称为元素)的不同数据组成,其中每个成员可以具有不同的类型。结构体通常用来表示类型不同但是又相关的若干数据。
2、结构体类型不是由系统定义好的,而是需要程序设计者自己定义的。C语言提供了关键字struct来标识所定义的结构体类型。
3、关键字struct和结构体名组合成一种类型标识符,其地位如同通常的int、char等类型标识符,其用途就像 int 类型标识符标识整型变量一样可以用来定义结构体变量。定义变量以后,该变量就可以像定义的其他变量一样使用了;成员又称为成员变量,它是结构体所包含的若干个基本的结构类型,必须用“{}”括起来,并且要以分号结束,每个成员应表明具体的数据类型。
- 结构体表示图
- 结构体基本程序编写
#include "stdio.h"
#include "string.h"
/*结构体第一种定义方法:
struct book{
char title[100];
char author[100];
};
这种定义方法在函数中调用"struct book xxx",也就是说struct book成为了一种数据类型*/
/*结构体第二种定义方法:
struct book{
char title[100];
char author[100];
}books[10];
这种定义方法直接声明了变量"books[10]"*/
/*结构体第三种定义方法:
struct book{
char title[100];
char author[100];
};
typedef struct book book;
这种定义方法在函数中调用"book xxx",这里将"struct book"转化为"book"*/
/*结构体第四种定义方法:
typedef struct book{
char title[100];
char author[100];
}book;
这种定义方法和第三种方法很类似,在函数中调用"book xxx"即可*/
//下面是上述所有方法的整合
struct book{
char title[100];
char author[100];
}books[10];
typedef struct book book;
int main(){
book *b=&books[3];//*号优先级最低
strcpy(books[0].title,"数据结构");
strcpy(books[0].author,"严蔚敏&吴伟民");
strcpy(books[1].title,"信号与系统");
strcpy(books[1].author,"郑君里");
strcpy(books[2].title,"零基础学Python");
strcpy(books[2].author,"小甲鱼");
strcpy(b->title,"钱学森弹道");
strcpy(b->author,"钱学森");
//从上面可以清楚地明白"."以及"->"的用法
//结构体变量.结构体变量的成员
//结构体地址-> 结构体变量的成员
int i;
for(i=0;i<=3;i++){
printf("%s\t belongs to %s\n",books[i].title,books[i].author);
}
return 0;
}
编译后的结果为
数据结构 belongs to 严蔚敏&吴伟民
信号与系统 belongs to 郑君里
零基础学Python belongs to 小甲鱼
钱学森弹道 belongs to 钱学森
- 结构体与数据结构的关系
1、在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
2、结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。(下面程序块有讲解)
//此结构体的声明包含了其他的结构体
struct COMPLEX{
char string[100];
struct SIMPLE a;
};
//此结构体的声明包含了指向自己类型的指针
struct NODE{
char string[100];
struct NODE *next_node;
};