自定义类型,由基本的类型构成
结构体
结构体类型定义
struct 名字{
基本的类型;
};
结构体的大小是怎么算出来的?
struct student_info{
char name[19]; //19
char sex; //1
char number[21];//21
short hight; //高度2
int age; //4
int weight; //4
};
以结构体内最大的数据类型为宽度(doble虽然是8但依旧以4位的宽度存储,要了两层)
所以先存19位
然后添加1位sex
补平 4*5的宽度再填21位
但空出3位才补平
因为short为2 所以填上
空一位,因为int的宽度为4,不可能塞进去,
所以另开一行。所以一共是 52~;
有这么一个结构体struct student_info类型
初始化方法1
struct student_info zhangsan = {"zhangsan",'m',"007",1.41,22,70};
struct student_info lisi = {"lisi",'w',"008",180,22,50};
初始化方法2
struct student_info zhangsan = {
.name = "zhangsan",
.sex = 'm',.number = "007",
.hight = 1.41,
.age = 22,
.weight = 70};
struct student_info lisi = {
.name="lisi",
.sex='w',
.number ="008",
.hight = 180,
.age = 22,
.weight = 50};
初始化方法3
逐个赋值
zhangsan.age = 22;
zhangsan.sex = 'm';
strcpy(zhangsan.name,"zhangsan"); //对于字符串,同仁方法要为strcpy方法
赋值方法4
从输入端获取信息。
char[20={0};
printf("please input student name:\n");
bzero(array,20);
fgets(array,20,stdin);
strcpy(wangwu.name,array);
1、初始化学生信息(四个同学),信息包括(姓名,年龄,学号,性别,身高,体重,高数成绩math,C语言成绩,物理成绩phy。要求至少两种方法,至少有两个同学信息手动输入
struct student_info *wan
定义指针对象里,切记用malloc分配空间
wan = malloc(sizeof(struct student_info));
指向对象的成员
指针->成员 wan->age;
2、枚举(据说是阉割过的东西,本义是限制范围,但我现在还不知他该用在什么地方
enum 名字(可自己定义){
成员;
}
举个粟子:
enum week
{
Monday, //默认是0
Tuesday, //1
Wednesday,//2
Thursday,//3
Friday,//4
Saturda,//5
Sunday//6
};
枚举变量的默认值从0开始,往后第一个成员逐个加1
int main(void)
{
enum week week_day;
week_day = 0;
switch(week_day)
{
case 0:
printf("Today is Monday!\n");
break;
case 1:
printf("Today is Tuesday!\n");
break
;
case 2:
printf("Today is Wednesday!\n");
break;
case 3:
printf("Today is Thursday!\n");
break;
case 4:
printf("Today is Friday!\n");
break;
case 5:
printf("Today is Saturday!\n");
break;
case 6:
printf("Today is Sunday!\n");
break;
default:
printf("can't find the day!\n");
break;
}
}
联合体
union 名字(可以自定义)
{
成员;
int a;
double b;
char c;
};
联合体所占的字节数为字节数最大的那个值,赋值的变量值会覆盖之前变量的值
===============================================================================
如判断当前系统处理器是大端还是小端
所谓大小端
指的是CPU本身对数据的存储方式
大端:高位数据放在低位地址
小端:高位数据放在高位地址
采用0x12345678来验证当前系统是大端还是小端
思路:
在一个int 地址里传入一个数据0x1234678
读该基地址上的一个字节。 char
如果值是12,就是大端。
如果值是78,就是小端。
使用union,里面定义一个int 一个char ,对int赋值,,获取char的值,12 就是大端
int main(int argc,char **argv)
{
int i;
i=1;
char *p=(char *)&i;
if(*p==1)
printf("small")
return 0;
}
typedef 取别字的关键字
typedef 已知类型(系统定义) 自定义类型
typedef int my_int;//my_int 代替了int 类型
typedef char* char_p;
typedef struct student
{
}*people;
可移植
typedef int u32;
typedef short u16;
typedef char u8;
1、建立一个包含有10同学基本信息的“列表”,采用指针方式去完成
基本信息包括:学号(1~99),姓名,性别,电话,QQ
要求:学号是随机数 []
2、输入一个日期(年,月,日),使用结构体,判断是在本年的哪一天(注意闰年)
3、选作:把1中的列表,按学号从大到小排列