C-结构体、枚举
#include <stdio.h>
//结构体:可以由多个不同类型的数据构成
int main()
{
struct Person
{ //里面的3个变量,可以称为是结构体的成员或者属性
int age;
double height;
char *name;
};
struct Person p = {20, 1.55, "jack"};//根据结构体类型,定义结构体变量,,,,且只能在定义结构体变量的同时对成员进行依次赋值。
p.age = 30;
p.name = "rose";
return 0;
}
#include <stdio.h>
int main()
{ //1.定义结构体类型(并不会分配存储空间)
struct Date
{
int year;
int month;
int day;
};
//2.定义结构体变量(真正分配存储空间)
struct Date d1 = {2011, 4, 10};
struct Date d2 = {2011, 8, 9};
//会将d1 所有成员的值对应地赋值给d2的所有成员
d2 = d1;
return 0;
}
从小到大,从上往下
#include <stdio.h>
int main()
{
struct Student
{
int age;
char *name;
}
struct Student stu;
stu.age = 20;
stu.name = "jack";
int s = sizeof(stu);
printf("%d\n", s);
return 0;
}
//输出为:16
//补齐算法, 结构体所占内存空间,一定为最大成员所占存储空间的倍数,
变量的多种定义方式:
#include <stdio.h> int main() { /*方式一: //1.类型 struct Student { int age; double height; char *name; }; //2.变量 struct Student stu = {20, 1.78, "jack"}; */ //方式二 struct Student { int age; double height; char *name; } stu;//等同于方式一 //包括两个部分 1,定义结构体类型 2,利用新定义好的类型来定义结构体变量 //即定义类型的同时定义变量 struct Student stu2;//再次使用S他人的n天 //方式三 struct { int age; char *name; } stu;//缺点:不能重用 return 0; }
总结: 定义结构体变量的3种方式
1,先定义类型再定义变量
struct Student { int age; };
struct Student stu;
2, 定义类型的同时定义变量
struct Student { int age; } stu; struct Student stu2;
3, 定义类型的同时定义变量(省略类型名称)
struct { int age; } stu;
//指向结构体的指针 int main() { struct Student { int no; int age; }; struct Student stu = {1, 20}; struct Student *p;//指针变量p将来指向struct Student类型的数据 p = &stu;//指针变量p指向了stu变量 //第一种 printf("age= %d, no=%d\n", stu.age, stu.no); //第二种 printf("age= %d, no=%d\n", (*p).age, (*p).no);//访问stu的存储空间里的no //第三种 printf("age=%d, no=%d\n", p->age, p->no); }
总结:
1, struct Student *p;
2, 利用指针访问结构体成员
1》 (*P).成员名称
2》 p->成员名称
//结构体的嵌套 int main() { struct Date { int year; int month; int day; } struct Student { int no; //int year; //int month; //int day; struct Date birthday; struct Date ruxueDate; } struct Student stu = {1, {2000, 9, 10}, {2012, 9, 12}}; return 0 }
枚举
//枚举 int main() { //定义枚举类型 enum Season { spring,//0 也可以自定义为1 summer,//1 autumn,//2 winter//3 }; //2,定义枚举变量 enum Season s = summer return 0; }
数据类型总结----------------------------------
基本数据类型
int
long int 、 long 8 %ld
short int 、 short 2 %d %i
unsigned int、 unsigned 4 %zd
signed int、 signed、 int 4 %d %i
float/double
floar 4 %f
double 8 %f
char 1 %c %d
char类型保存在内存中的是它的ASCII值
二构造类型
1,数组
只能由同一种类型的数据组成、
2,结构体
可以由不同类型的数据组成
三、指针类型
间接操作变量的值