[C语言

 A. 基本知识

 
与数组的对比
数组:
构造类型
只能有多个相同类型的数据构成
 
结构体:
结构体类型
可以由多个不同类型的数据构成
 
1. 定义类型
1     struct Student
2     {
3         int age;
4         char *name;
5         float height;
6     };
 
2. 定义结构体变量
定义变量的多种方式
a.
1     //define a struct variable
2     struct Student stu = {27, "simon", 1.65f};
 
b.
1     struct Student {
2         int age;
3         char *name;
4         float height;
5     } stu = {25, "simon", 1.65f};
 
1     /*错误写法
2     struct Student p;
3     p = {17, "Tom"};
4      */
c.
1     struct Student p;
2     p.age = 17;
3     p.name = "Tom”;
d.   
1     struct Student p2 = {17, "Sam”};

e. 
1     struct Student p3 = {.name="Judy", .age= 44};
f.匿名
1     struct
2     {
3         int age;
4         char *name;
5     } stu3;
 
3. 不允许结构体进行递归定义
在结构体构造代码内定义本结构体的变量
 
4. 可以包含其他的结构体
复制代码
 1 void test1()
 2 {
 3     struct Date
 4     {
 5         int year;
 6         int month;
 7         int day;
 8     };
 9    
10     struct Student
11     {
12         int age;
13         struct Date birthday;
14     };
15    
16     struct Student stu = {25, {1989, 8, 10}};
17    
18     printf("my birthday ==> %d-%d-%d
", stu.birthday.year, stu.birthday.month, stu.birthday.day);
19 }
复制代码
 
5. 结构体数组
1     struct Student
2     {
3         int age;
4         char *name;
5         float height;
6     } stus[5];
 
匿名
1     struct
2     {
3         int age;
4         char *name;
5         float height;
6     } stus[5];
 
6. 结构体作为函数参数, 传递的仅仅是成员的值
 
7. 指向结构体的指针
复制代码
 1 void test4()
 2 {
 3     struct Person p = {33, "ss"};
 4     struct Person *pointer;
 5    
 6     pointer = &p;
 7    
 8     printf("test4: person's age = %d
", p.age);//It's p!!!, not pointer!!
 9     printf("test4: person's age = %d
", (*pointer).age);
10     printf("test4: person's age = %d
", pointer->age);
11 }
复制代码
 
==> 3种方式访问结构体成员变量
a. struct.v
b. (*pointer).v
c. pointer->v
 
8.结构体内存分配
a.定义的时候不会分配存储空间
b.定义结构体变量的时候分配空间,分配的空间大小是最大成员变量的倍数
 
 
9.结构体复制
1     struct Student p2 = {17, "Sam"};
2     struct Student p3 = {.name="Judy", .age= 44};
3     p3 = p2;
4     printf("p3: age->%d, name-.%s
", p3.age, p3.name);
 
out:
p3: age->17, name->.Sam
 
如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
原文地址:https://www.cnblogs.com/wvqusrtg/p/4500787.html