- 结构体
- 结构体类型的声明
- 结构体创建图解:二种方法
- 结构体初始化
- 结构体的初始化有三种:
- 结构体成员访问
- 结构体传参
结构体是指:
不同类型值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量
结构体和其他类型基础数据类型一样,例如int类型,char类型只不过结构体可以自定义数据类型
进行复杂对象的描述就会使用到结构体
例如:
一个学生的信息就需要学号(字符串),姓名(字符串),年龄(整形),电话号码(int)等等
这些数据类型都不同但是他们又是表示一个整体,结构体就可以将不同类型的数据存放在一起,当做一个整体进行使用,也可以进行封装再次利用
结构体声明的语法形式:
struct book
{
char a;
char b; 成员列表
int c;
};
这里struct 是一个结构体关键字
book 是结构体标签,可以更改
结构的成员可以是标量、数组、指针,甚至是其他结构体
结构体创建图解:二种方法 结构体初始化结构体初始化在对结构体变量初始化时,要对结构体成员按照顺序一个一个赋值,不能跳过前面成员变量,而直接给后面成员赋初值,但是可以只赋值前面几个成员,对与后面的成员未赋值的变量,如果是数值型,则会自动赋值为0,对于字符型,会自动赋初值为NULL,即‘ ’
-
结构体变量创建时赋值
-
定义结构体时赋值
struct peo
{
char name[20]; //名字
char tele[12]; //电话
char sex[5]; //性别
int high; //身高
}s = { "张三","14256715841","男",182 };
-----------------------------------------------
或者
struct peo
{
char name[20]; //名字
char tele[12]; //电话
char sex[5]; //性别
int high; //身高
};
struct peo s = { "张三","14256715841","男",182 };
- 结构体的嵌套初始化
struct peo
{
char name[20]; //名字
char tele[12]; //电话
char sex[5]; //性别
int high; //身高
};
struct st
{
struct peo n;
int num;
float x;
};
int main()
{
结构体变量的创建
struct peo s = {"张三","14256715841","男",182};
struct st y = { {"小红","15584288419","女",168},100,3.14 };
输出
printf("%s %s %s %dn", s.name, s.tele, s.sex, s.high);
printf("%s %s %s %d %d %fn",y.n.name,y.n.tele,y.n.sex,y.n.high,y.num,y.x );
return 0;
}
结构体成员访问
结构变量的成员是通过点操作符(.)访问的.·点操作符接受两个操作数
结构体传参有二种方法
1.形参
打印时用的是.操作符
struct peo
{
char name[20];
char srx[10];
int tele[12];
};
print(struct peo str)
{
printf("%s %s %dn", str.name, str.srx, str.tele);
}
int main()
{
struct peo s = { "小明","男","15846092751" };
print1(s);
}
2.实参以指针的方式
打印时用的是->操作符
struct peo
{
char name[20];
char srx[10];
int tele[12];
};
print1(struct peo* str)
{
printf("%s %s %dn", str->name, str->srx, str->tele);
}
int main()
{
struct peo s = { "小明","男","15846092751" };
print2(&s);
}
如果选择结构体传参时首选以指针的方式
因为如果选择以形参的函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的
下降。
总结:
结构体传参的时候,要传结构体的地址



