作者前言
🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂
目录
结构体
1.结构体类型的声明
2. 结构体初始化
3. 结构体成员访问
4.结构体传参
插播小知识
1.char 、int 、short、double、等等都是C语言的内置类型
结构体的声明
结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
这里的结构就是结构体
前面我的学习的数组:一组相同类型元素的集合
结构的声明
struct tag
{
member - list ;
} variable - list ;
结构体关键字:struct
结构体类型名字:tag
成员列表: member-list 可以是一个或者多个
variable-list:变量列表
cpp
#include <stdio.h>
struct Studey
{
//描述学生的相关属性
char name[20];
int age;
char sex[5];
char tele[12];
} s3, s4;
//s3.s4是结构体类型的变量
//全局变量
int main()
{
struct Studey s1;
struct Studey s2;
return 0;
}
代码中有两种定义结构体类型 ,s3,和s4的定义的是结构体类型变量,是全局变量,s1和s2定义结构体类型变量,是局部变量,
有小可爱觉得定义结构体类型变量有点繁琐,我们可以使用typedef类型重定义
cpp
#include <stdio.h>
typedef struct Studey
{
//描述学生的相关属性
char name[20];
int age;
char sex[5];
char tele[12];
} Stu;
int main()
{
Stu s1;
Stu s2;
return 0;
}
结构成员的类型
结构的成员可以是变量、数组、指针,甚至是其他结构体。
cpp
#include <stdio.h>
struct B
{
char c;
int i;
};
struct C
{
char c;
int num;
int arr[10];
double* pd;
struct B b;
struct B* pb;
} s0;
struct B s1;
int main()
{
return 0;
}
结构体变量的定义和初始化
cpp
#include <stdio.h>
struct B
{
char c;
int i;
};
struct C
{
char c;
int num;
int arr[10];
double* pd;
struct B b;
struct B* pb;
} s0;
struct B s1;
int main()
{
// 按照顺序初始化
double a = 10;
struct C s2 = { 'q', 100, {1,2,3}, &a, {'a', 99}, NULL };
//指定成员初始化
struct C s3 = { .c = 's', .num = 100 };
return 0;
}
初始化有两种,一种是全部初始化,一种是部分初始化。
结构体成员的访问
.
->
cpp
#include <stdio.h>
#include <string.h>
struct S
{
char name[20];
int age;
};
void set_s(struct S* t)
{
//s.name = "zhangsan";
t->age = 18;
strcpy(t->name, "张三");
}
int main()
{
struct S s = { 0 };
//写一个函数给s中存放数据
set_s(&s);
return 0;
}
需要注意的是往数组名里写入数据要使用strcpy ,因为数组名是一个常数,往常数里面是不能写入数据的,
结构体传参
cpp
#include <stdio.h>
#include <string.h>
struct S
{
char name[20];
int age;
};
void set_s(struct S* t)
{
//s.name = "zhangsan";
t->age = 18;
strcpy(t->name, "张三");
}
void prit_s(struct S* s)
{
printf("%d\n%s", s->age, s->name);
}
int main()
{
struct S s = { 0 };
//写一个函数给s中存放数据
set_s(&s);
//打印结构体
prit_s(&s);
return 0;
}
如果是打印结构体一般是传地址过去,因为创建形参会在栈区申请一块空间,如果使用传值,空间的申请就很大,如果传址,就会节省很大空间,
结论:
结构体传参的时候,要传结构体的地址。
总结:
结构体就介绍到这里了,有不懂的小可爱可以私聊我