1,结构体是什么
结构体是组合数据类型的一种,其成员类型可以是相互关联的基本数据类型也可以是结构体 类型
2,使用场合
当要处理大量有关联的不同数据类型的时候,例如一个学生的信息,有学号(int),姓名(char *),年龄(int)等信息,就可以使用结构体,大大提高效率
3,怎么用
(1)声明或者说定义结构体类型
与基本数据变量的定义不同,由于系统已经知道基本数据类型的结构,类型名 变量名
就可以搞定,但是结构体是用户自己定义的,
首先要声明或定义结构体类型,告诉系统有这个类型,是怎么样的,定义结构体类型的方式为: 使用关键字struct 后面跟上类型名
struct 类型名
{
成员列表;//成员类表就是成员的 类型 名字;类型可以是基本数据类型,也可以是结构体类型
}
如:struct Student
{
int num;
char name[20];
char sex;
int age;
char address[20];
}; //这样就定义了一个结构体类型Student,内部包含学生的各种信息
(2)定义结构体变量
在声明结构体类型(相当于一个模板)后就可以定义结构体变量了,主要有三种方式:
1> > 声明结构体类型和定义结构体变量分开(最常用和灵活的方式)
struct Student
{
int num;
char name[20];
char sex;
int age;
char address[20];
};//在声明了结构体类型struct Student后,定义结构体变量
struct Student studnet1,student2;//定义了两个结构体变量student1和student2
2>> 在声明结构体类型的同时定义结构体变量。如:
struct Student
{
int num;
char name[20];
char sex;
int age;
char address[20];
}studnet1,student2;
3>> 在声明结构体类型的同时定义结构体变量(匿名对象),但是没有类型名 如:
struct
{
int num;
char name[20];
char sex;
int age;
char address[20];
}studnet3;
4,使用注意
1>> 结构体类型和结构体变量是两个不同的概念,结构体类型相当于一个模板,在编译时是
不分配存储空间的,只对定义的.
结构体变量按照模板的定义分配相应的存储空间,这样的话只能对结构体变量赋值,存
取和运算,而不能对结构体类型进行赋值,存取和运算
2>> 同一作用域内不可重复定义结构体类型和结构体变量,匿名类型对象除外
3>> 可在函数内也可在函数外,效果及用法类似于局部变量和全局变量,也可以嵌套定义
4>> 可在函数内外定义同一个结构体类型,同样遵循就近原则
5>> 只有在定义结构体变量的同时才能批量初始化,定义结构体变量后,只能一个一个的初
始化
5,与数组的区别
1>> 结构体可以存不同类型的元素,而数组只能存同一类型
2>> 结构体类型需要我们自已定义.数组是用别的类型加[元素个数]
3>> 结构体内存分配方式很特别,使用对齐原则,不一定是所有元素的字节数和,而数组一定是 所
有元素的字节数和.
4>> 结构体指针可以指针名->结构体元素名(取元素);数组不行
6,结构体数组
结构体数组本质是数组,数组元素是同一类型的结构体变量,例如定义一个Student结构体
数组用于存放一个班级所有学生的信息
7,结构体指针
是指向结构体变量的指针,用法如下
struct Person
{
char *name;
int age;
}; // 定义结构体类型
struct Person per={"wangjintaof",2};//定义结构体变量的同时批量初始化
struct Person *p=&per; //定义指向结构体类型的指针,并初始化,使其指向pe
然后就可以用指针引用和访问结构体变量的元素了,具体三种方式如下
1>>>. P->name = "wangjintao";//给name成员变量赋值
2>>>. (*p).name = "wangjitnao";//给name成员变量赋值、
3>>>. Per.name="wangjitnao";
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。