当在定义结构体类型时需要使用C语言的关键字 : struct
如果想要定义结构体类型的变量\数组\指针,
那么需要先定义结构体
1.结构体类型的定义
struct tag //struct是关键字,在关键字之后写tag标签
{ //tag标签的命名需要见名生义
内部写的是结构体成员的定义;
}; //注意结构体定义结束之后需要有 ; 结尾
-----------------------------------
注意:
1.struct关键字之后可以加标签,也可以不加标签
加标签 : 不光可以在结构体定义之后加变量名,定义全局变量
也可以在函数内部通过 struct 标签 变量名;的方式
定义局部变量
不加标签 : 只能在定义结构体之后加变量名,定义全局变量
不能在别的函数中定义局部变量(因为没有标签)
2.定义结构体时,可以定义在函数之外,也可以定义在函数之内
函数之外 : 凡是在结构体定义之下的函数
都可以使用这个结构体
函数之内 : 该结构体类型只能是在该函数内使用
3.当定义结构体时不要给结构体的成员进行初始化
-----------------------------------
2.定义结构体类型的变量
数据类型 变量名 ;
int i ;
float f ;
char c ;
struct stu s ;
3.访问成员
不能直接的给结构体的成员赋值,
需要使用结构体类型的变量访问成员,进行赋值
需要使用分量运算符 : . ->
如果是结构体类型的变量访问成员,需要使用
变量名.成员 的方式访问
如果是结构体类型的指针访问成员,需要使用
指针名->成员 的方式访问
4.结构体类型变量的初始化
数据类型 变量名 = {数值,数值};
struct stu s = {10086, "yidong", 79};
5.结构体类型变量的使用
相同类型的结构体类型的变量,可以直接赋值
不同类型的结构体类型的变量,即使结构体成员相同,
也不能赋值
6.通过sizeof计算结构体的大小
结构体的大小相当于结构体成员大小的总和
也会考虑字节对齐的问题
(默认情况下会以结构体中最大的数据类型作为对齐的标准)
(主要是为了方便内存的管理)
7.结构体类型的指针
数据类型 指针名 ;
int * p ;
char * p ;
struct stu * p ;
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #include <stdio.h>
#include <stdlib.h>
struct stu//定义了学生的结构体
{
int id;
char name[32];
int math;
};
int main(int argc, char *argv[])
{
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu//定义了学生的结构体
{
int id;
char name[32];
int math;
};
int main(int argc, char *argv[])
{
struct stu s;//定义了结构体类型的变量
s.id = 10086;
sprintf(s.name, "yidong");
//strcpy(s.name, "yidong");
//s.name = "yidong";
s.math = 79;
printf("s.id = %d\n", s.id);
printf("s.name = %s\n", s.name);
printf("s.math = %d\n", s.math);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu//定义了学生的结构体
{
int id;
char name[32];
int math;
}S;//S是struct stu结构体类型的变量,并且是全局变量
void func(void)
{
S.id = 10010;
strcpy(S.name, "liantong");
S.math = 59;
printf("S.id = %d\n", S.id);
printf("S.name = %s\n", S.name);
printf("S.math = %d\n", S.math);
}
int main(int argc, char *argv[])
{
struct stu s;//定义了结构体类型的变量
s.id = 10086;
sprintf(s.name, "yidong");
//strcpy(s.name, "yidong");
//s.name = "yidong";
s.math = 79;
printf("s.id = %d\n", s.id);
printf("s.name = %s\n", s.name);
printf("s.math = %d\n", s.math);
func();
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct
{
int id = 9527;
char name[32];
int math;
}S;//S是结构体类型的变量,并且是全局变量
void func(void)
{
S.id = 10010;
strcpy(S.name, "liantong");
S.math = 59;
printf("S.id = %d\n", S.id);
printf("S.name = %s\n", S.name);
printf("S.math = %d\n", S.math);
}
int main(int argc, char *argv[])
{
//struct s;//定义了结构体类型的变量
//s.id = 10086;
//sprintf(s.name, "yidong");
//strcpy(s.name, "yidong");
//s.name = "yidong";
//s.math = 79;
// printf("s.id = %d\n", s.id);
// printf("s.name = %s\n", s.name);
// printf("s.math = %d\n", s.math);
func();
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu
{
int id;
char name[32];
int math;
};
int main(int argc, char *argv[])
{
struct stu s;//定义了结构体类型的变量
s.id = 10086;
sprintf(s.name, "yidong");
s.math = 79;
printf("s.id = %d\n", s.id);
printf("s.name = %s\n", s.name);
printf("s.math = %d\n", s.math);
scanf("%d", &s.id);
scanf("%s", s.name);
scanf("%d", &s.math);
printf("s.id = %d\n", s.id);
printf("s.name = %s\n", s.name);
printf("s.math = %d\n", s.math);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu
{
int id;
char name[32];
int math;
};
struct stu1
{
int id;
char name[32];
int math;
};
int main(int argc, char *argv[])
{
struct stu s = {10086, "yidong", 79};
struct stu1 new;
memcpy(&new, &s, sizeof(s));
/*
new.id = s.id;
strcpy(new.name, s.name);
new.math = s.math;
*/
printf("new.id = %d\n", new.id);
printf("new.name = %s\n", new.name);
printf("new.math = %d\n", new.math);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu
{
int id;
char name[28];
int math;
};
int main(int argc, char *argv[])
{
struct stu s = {10086, "yidong", 79};
printf("sizeof(s) = %ld\n", sizeof(s));
printf("sizeof(struct stu) = %ld\n",sizeof(struct stu));
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu
{
char c;
//int i;
long l;
short s;
};
int main(int argc, char *argv[])
{
struct stu s;
printf("sizeof(s) = %ld\n", sizeof(s));
printf("sizeof(struct stu) = %ld\n",sizeof(struct stu));
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu
{
char c;
short s;
int i;
};
int main(int argc, char *argv[])
{
struct stu s;
printf("&s.c = %p\n", &s.c);
printf("&s.s = %p\n", &s.s);
printf("&s.i = %p\n", &s.i);
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct JY
{
char name[20];
char sex;
int wuli;
int zhili;
int minjie;
};
void print(struct JY s);
void change(struct JY *p);
void print(struct JY s)
{
printf("姓名 : %s\n", s.name);
printf("性别 : %c\n", s.sex);
printf("武力 : %d\n", s.wuli);
printf("智力 : %d\n", s.zhili);
printf("敏捷 : %d\n", s.minjie);
}
void change(struct JY *p)
{
scanf("%s", p->name);
getchar();
scanf("%c", &p->sex);
scanf("%d", &p->wuli);
scanf("%d", &p->zhili);
scanf("%d", &p->minjie);
}
int main(int argc, char *argv[])
{
struct JY s = {"yangguo", 'M', 99, 90, 80};
print(s);//通过print函数打印玩家信息
change(&s);//通过change函数改变玩家信息
print(s);//通过print函数打印玩家信息
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct JY
{
char name[20];
char sex;
int wuli;
int zhili;
int minjie;
};
int main(int argc, char *argv[])
{
//struct JY *p;//定义了结构体类型的指针
//指针没有实际的指向,不能这样使用
struct JY s;
struct JY *p = &s;
strcpy(p->name, "guojing");
p->sex = 'M';
p->wuli = 100;
p->zhili = 59;
p->minjie = 70;
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
管理系统
//学生 老师 图书 火车票 菜单 旅馆 殡仪馆
增 删 改 查
打印数据
增加成员
删除成员
修改成员
查找成员
成员排序
数据存储
读取数据
struct cir
{
int x;
int y;
int r;
int color;
};
*/
struct JY//
{
char name[20];
char sex;
int wuli;
int zhili;
int minjie;
};
void print(struct JY *s);
void change(struct JY *p);
void print(struct JY *s)
{
int i = 0;
for(i = 0; i < 3; i++)
{
printf("姓名 : %s\n", s[i].name);//(s+i)->name
printf("性别 : %c\n", s[i].sex);
printf("武力 : %d\n", s[i].wuli);
printf("智力 : %d\n", s[i].zhili);
printf("敏捷 : %d\n", s[i].minjie);
printf("========================\n");
}
}
void change(struct JY *p)
{
int i = 0;
for(i = 0; i < 3; i++)
{
scanf("%s", p[i].name);
getchar();
scanf("%c", &p[i].sex);
scanf("%d", &p[i].wuli);
scanf("%d", &p[i].zhili);
scanf("%d", &p[i].minjie);
}
}
int main(int argc, char *argv[])
{
struct JY s[3] = {{"yangguo", 'M', 99, 90, 80},
{"guojing", 'M', 95, 59, 70},
{"zhangwuji", 'M', 98, 95, 90}};
print(s);//通过print函数打印玩家信息
change(s);//通过change函数改变玩家信息
print(s);//通过print函数打印玩家信息
return 0;
}
|