复杂数据类型,还有其他类型~~!
注:每个独立段的代码块,都默认在int main()函数里面,且开头都要空四格。
1、变量类型
根据变量作用域来分,可分两类。
1>局部变量 : 在函数内部(代码块)定义的变量
从定义变量的那一行开始,一直到代码块结束
从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收
2>全局变量 :在函数外面定义的变量
从定义变量的那一行开始一直到文件结尾。
2、结构体
可以由多个不同类型的数据构成。
定义结构体:
int main()
{
//定义结构体类型
struct person
{//里面的三个变量可以称为结构体的成员或者属性
int age;
double height;
char *name;
};
//根据结构体类型,定义结构体变量
struct person p = {20; 1.55; "jack" };
p.age = 30;
p.name = "rose";
printf("age=%d,name=%s,height=%f\n", p.age, p.name, p.height);
return 0;
}
3、结构体多种定义方式
1>定义结构体类型,利用定义好的类型来定义结构体变量,结构体类型不能重复定义
从定义类型的那一行开始,一直到所在的代码块结束,或定义在全局的结构体到所在的文件结束。
struct Student
{
int age;
double height;
char *name;
} stu;
struct Student stu2;
2>第二种结构体定义方式
下面定义结构体的方法不能重用
struct
{
int age;
double height;
char *name;
} stu;
struct
{
int age;
double height;
char *name;
} stu2;
4、结构体数组
先定义结构体类型
struct FastRecore
{
int no;
char *name;
int score;
int ages;
};
再定义结构体变量数组
struct FastRecore records[3] =
{
{1, "jack", 211, 20},
{2, "jim", 311, 30},
{3, "jake", 411, 40}
};
遍历结构体数组
for(int i = 0; i <4; i++)
{
printf("%d\t%s\t%d\t%d\n",records[i].no, records[i].name, records[i].score,records[i].ages);
}
5、指向结构体的指针
struct Student
{
int no;
char *name;
} ;
定义结构体变来量
struct Student stu = {1, "jack"};
定义一个结构体指针*p
struct Student *p
指针P指向了stu变量
p = &stu;
第一种输出方式
printf("name=%s, no=%d\n",stu.name, stu.no);
第二种输出方式
printf("name=%s, no=%d\n",(*p).name, (*p).no);
第三种输出方式
printf("name=%s, no=%d\n",p->name, p->no);
6、结构体嵌套定义
有时候一些结构体类型,会比较麻烦,这个时候就需要嵌套定义
struct Student
{
int ages;
floot height;
};
struct Class
{
int no;
struct Student ClassOne;
struct Student ClassTwo;
};
struct Class stu = {1,{19,1.78 },{29,1.81}};
输出
printf("编号=%d\t年龄=%d\t身高=%f\n", stu.no,stu.ClassOne.ages,stu.ClassOne.height);
7、枚举类型
首先定义枚举类型
enum Day
{
one,
two,
sthree,
four,
five,
six,
seven
};
其次定义枚举变量
enum Day day=seven;
printf("%d\n",day);