20170503

结构体可以用来统一存储多个不同类型的数据
结构体仅仅是一种数据类型,它本身不占有存储位置
结构体仅仅描述了多种数据之间的关系
结构体可以用来声明结构体变量,结构体变量实际占有内存空间

声明结构体需要一个关键字struct
结构体声明中包含多个变量声明语句,这些语句不会分配变量位置,因此不能初始化
结构体声明本身可以放在头文件中
可以在声明结构体的时候立刻声明结构体变量(不建议这样做,因为声明了变量就占据了内存,就不能放到头文件中了)
可以用struct关键字和结构体名称一起作为数据类型名称来声明结构体变量
typedef关键字可以用来给数据类型起别名,例如
  1 #include <stdio.h>
  2 int main() {
  3     struct person{
  4         int id;
  5         char name[20];
  6         float salary;
  7     };
  8     typedef struct person ppp;
  9     //struct person p;
 10     ppp p;
 11     return 0;
 12 }
只能使用typedef关键字给数据类型起别名而不可以使用宏
下面例子和上面一样2-6在声明结构体的同时立刻起了一个别名,这个时候可以省略结构体本身的名称(也就是下面的例子中的person可以省略)
  1 #include <stdio.h>
  2 typedef struct person {
  3     int id;
  4     char name[20];
  5     float salary;
  6 } ppp;
  7
  8 int main() {
  9     ppp p;
 10     return 0;
 11 }
在c语言中结构体中不可以包含函数(因为函数要占存储位置)
练习:声明一个结构体表示手机,一个手机包含一下信息(品牌,型号,价格)
声明一个结构体变量表示iphone5
  1 #include <stdio.h>
  2 #include <string.h>
  3 typedef struct telephone {
  4     char brand[20];
  5     char model[20];
  6     double price;
  7 } phone;
  8
  9 int main() {
 10     phone iphone5;
 11     strcpy(iphone5.brand, "Apple");
 12     strcpy(iphone5.model, "Iphone5");
 13     iphone5.price = 2000.0;
 14
 15     printf("品牌是:%s\n", iphone5.brand);
 16     printf("型号是:%s\n", iphone5.model);
 17     printf("价格是:%g\n", iphone5.price);
 18     return 0;
 19 }

结构体变量也可以初始化,初始化的语法和数组初始化的语法一样
  1 #include <stdio.h>
  2 #include <string.h>
  3 typedef struct telephone {
  4     char brand[20];
  5     char model[20];
  6     double price;
  7 } phone;
  8
  9 int main() {
 10     phone iphone5 = {"Apple", "Iphone6", 200000.0};
 11     /*
 12        strcpy(iphone5.brand, "Apple");
 13        strcpy(iphone5.model, "Iphone5");
 14        iphone5.price = 2000.0;
 15     */
 16     printf("品牌是:%s\n", iphone5.brand);
 17     printf("型号是:%s\n", iphone5.model);
 18     printf("价格是:%g\n", iphone5.price);
 19     return 0;
 20 }

 声明结构体表示屏幕上一个点,从键盘得到两个点的位置信息,并记录在两个结构体变量中,计算出这两个点的中点信息,并记录在一个新的结构体变量中,把新结构体变量的内容打印出来。
  1 #include <stdio.h>
  2
  3 typedef struct screen {
  4     int x;
  5     int y;
  6 } screen;
  7
  8 int main() {
  9     screen a1 = {}, a2 = {}, a3 = {};
 10     printf("请输入第一个点的位置:");
 11     scanf("%d%d", &a1.x, &a1.y);
 12     printf("请输入第二个点的位置:");
 13     scanf("%d%d", &a2.x, &a2.y);
 14     a3.x = (a1.x + a2.x) / 2;
 15     a3.y = (a1.y + a2.y) / 2;
 16     printf("中点的位置为:%d  %d\n", a3.x, a3.y);
 17     return 0;
 18 }
 同类型的结构体变量之间可以直接赋值,不需要逐个子变量赋值

posted @ 2017-05-03 15:16  小不懂装懂  阅读(106)  评论(0编辑  收藏  举报