结构体
struct s
{
int a;
char b[10];
double c;
};
创建一个结构体类型,用struct 加上你自定义的一个名字即可,后面跟上一个花括号花括号后跟上一个分号花括号中写上你想这个结构体包含哪些类型的变量。
注意 当定义一个结构体类型时是不占用空间的,只是相当于模板的作用,只有以这个为模板创建出来变量才会占用空间
结构体变量的创建
第一种 在定义结构体类型后紧跟着在花括号后创建变量
struct s
{
int a;
char b[10];
double c;
}a,b,c;
第二种
和其他变量一样变量类型 加标识符创建
struct s
{
int a;
char b[10];
double c;
};
int main()
{
struct s a, b, c;
return 0;
}
结构的成员可以是标量、数组、指针,甚至是其他结构体。
举个小例子
struct s
{
int a;
char b[10];
double c;
}a = { 10,"c语言",6.66 };
struct b
{
char b[5];
int c;
struct s d;
};
但是创建结构体类型时里面不能包含自己创建的这个类型
struct b
{
char b[10];
int c;
struct s d;
struct b m;
};
比如这个就不行因为这样创建,该结构体的大小就不确定了
结构体的初始化
第一种方式
struct s
{
int a;
char b[10];
double c;
}a = { 10,"c语言",6.66 };
第二种方式
struct s
{
int a;
char b[10];
double c;
};
int main()
{
struct s a = {10,"c语言",6.66};
return 0;
}
如果是结构体里有结构体
struct s
{
int a;
char b[10];
double c;
}a = { 10,"c语言",6.66 };
struct b
{
char b[10];
int c;
struct s d;
};
int main()
{
struct b a = { "cyuyan",10,{10,"cyuyan",6.66} };
return 0;
}
用花括号把内部的结构体括起来再进行相关操作
结构体变量的访问
#include<stdio.h>
struct s
{
int a;
char b[10];
double c;
}a = { 10,"c语言",6.66 };
struct b
{
char b[10];
int c;
struct s d;
};
int main()
{
struct b a = { "cyuyan",10,{10,"cyuyan",6.66} };
struct b* p = &a;
printf("%s %d %d %s %lf\n", a.b, a.c, a.d.a, a.d.b, a.d.c);
printf("%s %d %d %s %lf", p->b,p->c,p->d.a,p->d.b,p->d.c);
return 0;
}
用 . 和 ->
注意这个箭头使用减号和大于号打出来的
结构体的一些其他零碎知识
定义一个结构体指针变量,该变量必须指向一个合法的空间
当指向了一个合法空间后,便可以对指针进行操作了
结构体类型创建如果在main函数内,那么只能在main函数内使用该类型,如果在外部创建,那么main函数内外都可以使用
函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的
下降。
所以说传参的时候尽量传结构体类型变量的地址
总结
也没什么好总结的,下篇文章我再写写有关于结构体大小的问题,感谢大家看的我文章。如果写得有问题,欢迎大家的指正。