目录
一、构造类型
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语言就结束啦!
加油!