黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
第五 复杂构造数据类型
01 结构体的定义:
一般形式:
struct 结构体名
{
类型标识符1 成员1;
类型标识符2 成员2;
………………
………………
类型标识符n 成员n;
};
结构体类型用struct关键字定义,花括号里每一项称为结构体成员,结构体类型可以是普通的数据类型,也可以是数组,指针数组或已经定义的结构体的类型.
/* 数组:只能由多个相同类型的数据构成 结构体:可以由多个不同类型的数据构成 */ #include <stdio.h> int main() { struct student { int age; double height; char *name; }; struct student stu = {23,185,"gp"}; stu.age=108; printf("age=%d,height=%f,name=%s\n",stu.age,stu.height,stu.name); return 0; }
02 定义结构体类型变量的方法
(1) 先定义结构体类型,再定义结构体变量
如:
struct student
{
int num;
char name[12];
float score;
};
struct student stu1,stu2;
(2) 在定义结构体类型的同时定义变量
如:
struct student
{
int num;
char name[12];
float score;
};stu1,stu2;
该定义即定义了类型,又定义了变量.后续程序中还可以继续定义,如: struct student stu3;
#include <stdio.h> int main() { struct RankRecord { int no; int record; char *name; }; struct RankRecord records[3] = { {1,544,"gp"}, {2,250,"zy"}, {3,25,"zl"} }; records[2].no = 5; for (int i = 0; i<3; i++) { printf("%d-%d-%s\n",records[i].no,records[i].record,records[i].name); } return 0; }
(3) 直接定义结构体类型变量
如:
struct
{
int num;
char name[12];
float score;
};stu1,stu2;
该定义省略了结构体名,则在后续中不能再定义该类型的变量.
03 结构体类型变量的引用
(1) 成员的引用形式:
结构体变量名.成员名
(2) 结构体变量使用说明:
l 结构体变量通常不能整体使用,不能整体输入,输出,只能对单个成员分别引用
l 可以定义与结构体成员同名的普通变量,它们之间不会发生混乱.
04 结构体变量的初始化:
l 可以在定义结构体变量的同时,对其初始化
如: struct student
{
int num;
char name[12];
float score;
};stu1={15001,”宋红”,89.5};
还可以写成以下形式:
struct student stu2={15001,”宋红”,89.5};
以下错误的:
struct student stu3;
stu3={15001,”宋红”,89.5};
05 结构体与指针
(1) 指向结构体的指针
定义了指向结构体变量的指针后,就可以将结构体变量的地址,即变量的起始地址赋值给指针变量,则*p就相当于它所指向的结构体的变量,成员引用时可以用(*p)表示
(2) 3种引用结构体变量的方法:
l 结构体变量.成员名
l (*p).成员名
l p->成员名
06 枚举类型:
l 枚举的概念:
所谓枚举,是指将变量的所有取值一一列举出来,变量的取值只限于列举出来的值的范围,该变量称为枚举类型变量,所列举的值叫做枚举元素或枚举常量.
#include <stdio.h> int main() { enum Sex{Man,Woman,Unkown}; // 定义枚举类型 enum Season { spring, summer, autumn, winter }; // 2. 定义枚举变量 enum Season s = 2; printf("%d\n",s); return 0; }
l 枚举类型的定义:
enum 枚举类型标识符{枚举元素1,枚举元素2,……….枚举元素n};
enum 枚举类型名 变量列表;
如: enum weekday {sun,mon,tue,wed,thu,fri,sat};
enum weekday day;
*枚举类型的引用:
枚举元素是常量,不是变量,不能在定义以外的任何位置对它们赋值
* 枚举元素可以改变,但是必须在定义时指定
/* 1.作用:给已经存在的类型起一个新的名称 2.使用场合: 1> 基本数据类型 2> 指针 3> 结构体 4> 枚举 5> 指向函数的指针 */ #include <stdio.h. typedef int MyInt; typedef char * String; struct Student { int age; }; typedef struct Student MyStu; typedef struct Student { int age; }MyStu; typedef struct { int age; }MyStu; enum Sex {Man,Woman}; typedef enum Sex MySex;