[C语言 - 7] 结构体struct

 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\n", 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\n", p.age);//It's p!!!, not pointer!!
 9     printf("test4: person's age = %d\n", (*pointer).age);
10     printf("test4: person's age = %d\n", 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\n", p3.age, p3.name);
 
out:
p3: age->17, name->.Sam
 
posted @ 2014-11-10 14:30  HelloVoidWorld  阅读(263)  评论(0编辑  收藏  举报