1、结构体的理解
结构体就是一些值的集合,这些值称为成员变量.
用白话说:存放值的仓库,里面的值随取随用。(够简单)
2、结构体的声明
3、结构体的定义
第一种方式:
struct sq
{
int a;
int b;
char c;
float d;
int arr1[10];
char arr2[10];
};
struct sq s;//s为结构体变量
//struct sq为结构体类型
第二种方式:
struct sq
{
int a;
char c;
}s1,s2;//定义了s1,和s2
第三种方式:
struct //没有标签直接定义变量
{
int a;
char c;
}s1,s2;
(第三种方式的结构体只能用一次,用完即弃)
注意:1.结构体要定义在主函数之上
2.结构体没地址,结构体变量才有地址
4、结构体的使用
4.1结构体的初始化(赋值)
第一种方式:
struct sp
{
int a;
char c;
char* cp;
}s1 = { 1,'a',"YYDS" };//<-----
第二种方式:
struct sp
{
int a;
char c;
char* cp;
};
struct sp s = { 1,'a',"永远的神" };//<------
第三种方式:
struct sp
{
int a;
char c;
char* cp;
};
struct sp s;
int main() {
s.a = 1;
s.c = 'a';
s.cp = "看不懂没关系,之后会讲";//<-------
return 0;
}
4.2结构体的成员访问
struct sp
{
int a;
char c;
char arr[40];
};
int main() {
struct sp s = { 123,'C',"结构体成员用“.”访问" };
s.a = 10076;
scanf("%c" ,&s.c);
printf("%s", s.arr);
return 0;
}
5、结构体数组
储存结构体的数组
#include <stdio.h>
struct sp
{
int a;
char c;
char arr[40];
}cla[];//也可以在这定义
// [] 中数字可以省略
struct sp cla[] = { {1,'a',"aaa"},{2,'b',"bbb"},{3,'c',"ccc"},
{4,'d',"ddd"},
{5,'e',"eee"} };
int main() {
cla[1].a = 10;
printf("%d", cla[1].a);
return 0;
}
6、结构体指针
6.1结构体指针的定义
struct sp
{
int a;
char c;
char arr[40];
}q;
struct sp* p = &q;
也能这样:
struct sp
{
int a;
char c;
char arr[40];
}q,*p=&q;//*p指向q(结构体变量)
6.2指针访问结构体成员
struct sp
{
int a;
char c;
char arr[40];
}q;
struct sp* p = &q;
int main() {
p->a = 10;
p->c = 'A';
gets(p->arr);// gets() 的作用是输入字符串复制给 p->arr
printf("%s", p->arr);
return 0;
}
6.2指向结构体数组的指针
struct sp
{
int a;
char c;
char arr[40];
}q[4] = { { 1,'a',"aaa" },{2,'b',"bbb"},
{3,'c',"ccc"},{4,'d',"ddd"}};
struct sp* p = &q;
int main() {
//其实就是指针访问数组
p[0].a = 100;
p[2].c = 's';
return 0;
}
7、typedef关键字的使用
typedef用来定义新的数据类型。
简单点说:给结构体类型起别名
typedef struct sp
{
int a;
char c;
char arr[40];
};
typedef struct sp qlis;//给struct sp类型起个别名,叫qlis
int main() {
//下面的 q 和 struct sp 是相等的
qlis sz1;
struct sp sz2;
return 0;
}
也可以这样写:
typedef struct sp
{
int a;
char c;
char arr[40];
}qlis;//把别名qlis放在这里
8.结构体嵌套结构体
typedef struct sp
{
int a;
char c;
char arr[40];
struct spp//就是结构体套娃
{
int a;
char c;
}s;
}qlis;
int main() {
qlis p;
p.s.a = 10;
p.s.c = 's';
return 0;
}