目录
一、构造类型
1.1.结构体
1.存储
2.输入输出(传参)
3.结构体数组
1.2.共同体(联合体)
1.格式
2.存储
3.测试一个平台是打端还是小端
1.3.枚举
1.格式
2.特点
二、位运算(操作二进制)
2.1.&
2.2.|
2.3.^
2.4.~(取反)
2.5.<<
2.6.>>
2.7.运算符优先级
三、总结
一、构造类型
1.1.结构体
1.存储
存放结构体成员变量,必须保证前面的长度为成员变量所占空间大小的整数倍;
结构体整体的大小必须为最大类型长度的整数倍 ;
2.输入输出(传参)
以例子说明
(1)定义日期的结构体,封装一个函数给结构体成员变量赋值(不传参数,在函数内部定义结构体变量,赋值后,返回结构体变量的值,在主函数接收),封装一个函数(传递结构变量)打印结构体成员变量。
#include <stdio.h>struct mdate
{int year;int month;int day;
};struct mdate InPutNum(void)
{struct mdate tt;scanf("%d%d%d", &tt.year, &tt.month, &tt.day);return tt;
}int OutPutNum(struct mdate t)
{printf("%d-%d-%d\n", t.year, t.month, t.day);return 0;
}int main(void)
{struct mdate t;t = InPutNum();OutPutNum(t);// printf("%d-%d-%d\n", t.year, t.month, t,day);return 0;
}
(2)定义日期的结构体,封装一个函数给结构体成员变量赋值(传递结构体变量的地址)进行值的输入,封装一个函数(传递结构变量的地址)打印结构体成员变量。
#include <stdio.h>struct mdate
{int year;int month;int day;
};int InPutNum(struct mdate *d)
{scanf("%d%d%d", &d->year, &d->month, &d->day);return 0;
}int OutPutNum(struct mdate *d)
{printf("%04d-%02d-%02d\n", d->year, d->month, d->day);return 0;
}int main(void)
{struct mdate d;InPutNum(&d);OutPutNum(&d);return 0;
}
3.结构体数组
定义学生结构体,定义结构体数组变量录入三名学生的信息,使用数组传参的方式来输入输出学生的信息。
#include <stdio.h>struct student
{char name[32];char sex;int age;int score;
};int InPutAllStInof(struct student *p, int len)
{int i = 0;for(i = 0; i < len; i++){scanf("%s", p[i].name);scanf(" %c", &p[i].sex);scanf("%d", &p[i].age);scanf("%d", &p[i].score);}return 0;
}int PutAllStInof(struct student *p, int len)
{int i = 0;for(i =0; i < len; i++){printf("姓名:%s\n", p[i].name);printf("性别:%c\n", p[i].sex);printf("年龄:%d\n", p[i].age);printf("成绩:%d\n", p[i].score);printf("========================\n");}return 0;
}int main(void)
{struct student s[3];InPutAllStInof(s, 3);PutAllStInof(s, 3);return 0;
}
1.2.共同体(联合体)
1.格式
union s{char a;int b;};
2.存储
联合体的成员变量共同使用一个空间(空间大小为最大的那个类型对应的)
3.测试一个平台是大端还是小端
小端:低地址存储低位数据
大端:低地址存储高位数据
我是用的ubuntu是小端
#include <stdio.h>union s
{char a;int b;
};int main(void)
{union s s1;s1.b=1;if(s1.a){printf("小端!\n");}else{printf("大端!\n");}return 0;
}
1.3.枚举
1.格式
enum s
{变量名1,变量名1,变量名1,变量名1,....
};
2.特点
未初始化,第一个成员变量的默认值为0,剩余的依次+1;
初始化第一个成员变量,后面的也是依次+1;
枚举类型对应的变量的值应该为枚举常量中的值之一;
枚举常量可以让代码提高可读性;
二、位运算(操作二进制)
2.1.&
遇0置0
2.2.|
遇1置1
2.3.^
相同为0 相异为1
a(任意数)a ^ 0 = a;a ^ a = 0;
可用来交换数据
int a = 100;
int b = 500;a = a ^ b;
b = a ^ b;
a = a ^ b;
结果
a = 500;
b = 100;
2.4.~(取反)
2.5.<<
扩大数据 num *= 2^n
2.6.>>
缩小数据 num /= 2^n
2.7.运算符优先级
括号 > 单目 > 双目 > 三目 > 赋值 > 逗号
双目:算数 > 移位 > 关系 > 位运算 > 逻辑
三、总结
今天是2024年7月26日,学习的第14天。今天完完全全学习了构造类型的定义和使用场景,以及位运算符的使用。大概还有一天时间C语言就结束啦!
加油!