C语言--结构体

一、结构体

1.结构体变量的定义

 * 结构体可以由多个不同类型的数据构成

 * struct Person {int age; double height; char *name}; //先定义结构体类型,该结构体有三个成员或者属性

 * struct Person p = {18, 1.80, "jack"}; //再根据结构体类型定义变量,并进行初始化

2.结构体变量属性的赋值

 1>变量属性赋值1

 struct Person p = {18, 1.80, "jack"};

 //属性的修改

 p.age = 20;

 p.height = 1.78;

 p.name = "rose";

 p = {19, 1.77, "jame"};// 错误赋值方式,只能在定义变量是进行初始化

 2> 结构体变量赋值2

 struct Person p2 = {.age =19 ; .height =176 ; .name ="tom" };

3.结构体内存分析

 1> struct Date {int year ;int month; int day} ;//本行代码只是定义了一个结构体类型,并未分配存储空间

 2> struct Date d1 = {2011,4,10};//定义结构体变量(真正分配存储空间),结构体变量的存储空间就是它所有变量的和(只限于结构体内所有变量类型相同的情况)--12个字节,可以用sizeof(d)检测

 3> struct Student {int age; char *name};

  struct  Student stu = {18, "jary"};// 此时结构体变量占用16个字节。因为当结构体变量是不同类型的数据时,存储空间为最大类型数据字节的倍数

4.结构体变量的多种定义方式

 1> struct Person {int age; double height; char *name};

  struct Person p = {18, 1.80, "jack"};

 2> struct Person {int age; double height; char *name} p1;//定义结构体的同时定义了变量

  struct Person {int age; double height; char *name} p2;//错误写法,结构体类型重复定义

 3> struct {int age; double height; char *name} p3;//缺点:不能重复定义变量

5.结构体作用域

 * 结构体类型也有作用域,从定义类型的那一行开始,一直到代码块结束

 * 可以对比全局变量和局部变量,进行定义和使用

6.结构体数组

 1>结构体数组定义

  struct Person {int age; double height; char *name};

  struct Person names[3] = { {18, 1.80, "jack"},  {18, 1.80, "jame"},  {18, 1.80, "tom"}};

7.指向结构体的指针

 1> 指针的定义

   struct Person {int age; double height; char *name};//定义类型

  struct Person p1 = {18, 1.80, "jack"};//定义结构体变量

  struct Person *p; //定义了struct Person类型的指针

  p = &p1;//指针变量p指向了p1变量

 2> 访问结构体变量属性的方式

 ① p1.age; p1.height;p1.name; //利用变量名直接访问

 ② (*p).age; (*p).height; (*p).name; //利用指针访问

 ③ p->age; p->height; p->name; //利用指针箭头

8.结构体嵌套

 1> struct Date {int year ;int month; int day};

  struct Student {int age; double height; struct Date birthday};//结构体嵌套定义

  struct Student stu = {18,188,{1996,9,9}};

二、数据类型总结

1.基本数据类型

 1> int

 ①long int、long:8个字节 %ld

 ②short int、short:2个字节 %d、 %i

 ③unsigned int、unsigned:4个字节%d、%i

 ④signed int、signed:4个字节%d、%i

 2> float/double

 ①float:4个字节 %f

 ②double:8个字节 %f

 3>char

 ①1个字节 %c、%d

 ②char类型保存在内存中的是它的ASCII值;'A'-->65

2.构造类型

 1>数组:只能存储同一种类型的数据

  定义:数据类型 数组名[元素个数]

 2>结构体:可以由多个不同的类型数据组成

  定义:先定义类型 再利用类型定义变量

3.指针类型

 1> 变量的定义:int *p;

 2> 间接操作变量的值,int a = 10;int *p;p = &a;*p = 20;

4.枚举类型

 1> 使用场合:当一个变量的取值,只有几个固定取值时

三、自我总结

  基本数据类型,或者C语言数组中只能存放同种数据类型中的一个或几个数据,在实际应用中受到很多限制,不能满足我们的需求。而结构体的出现大大弥补了这起、中缺陷的不足,它可以根据不同的需求,定义不同的结构体以满足我们的需要,不管是是数量还是类型方面都很好的拓展了数据所能表示的范围,如果再喝typedef结合使用更是相辅相成,大大满足了我们的需求。

 

posted @ 2015-01-22 11:08  水木清华hm  阅读(355)  评论(2编辑  收藏  举报