2021-07-27

DAY 8

编译器:VS2019;

学习资料
1、B站视频(P42~P47)见链接 【求知讲堂2021C语言/C++视频99天完整版(不断更新中)学完可就业-哔哩哔哩】https://b23.tv/4DzQDY;

位域

#include<stdio.h>
#include<string.h>
#pragma warning (disable : 4996)

struct Bit
{
	unsigned int isTrue : 1;
	unsigned int isFalse : 1;//限定内存位数, 只用2位来存储值。
};
struct Age
{
	unsigned int age : 3;//2  10  4  100  8  1000
};

int main(void)
{
	//struct Bit bit;
	//struct Age age1;
	//age1.age = 4;
	//printf("%d\n", sizeof(bit));
	//printf("%d\n", sizeof(age1));
	//
	//age1.age = 8;
	//printf("%d\n", age1.age);//输出为0因为越界,只能存储到3位

	//age1.age = 7;
	//printf("%d\n", age1.age);  //7 二进制位111

	return 0;

}

typedef

typedef定义的一般类型

  • typedef 原类型名 新类型名
  • 注:其中原类型名中有定义部分,新类型名一般用大写表示,以便区分;有时也可用宏定义来代替typedef的功能,但是宏定义是由预处理完成的,而typedef是由编译时完成的,后者更灵活。
#include<stdio.h>
#include<string.h>
#pragma warning (disable : 4996)

typedef unsigned char BYTE;
typedef int INT;

typedef struct Books
{
	char title[100];
	char bookname[50];
	char author[50];
	int bookID;
}Book;

int main(void)
{
	Book book1;

	strcpy(book1.title, "c语言");
	strcpy(book1.author, "张三");
	strcpy(book1.bookname, " c语言从入门到精通");
	book1.bookID = 10010;

	printf("%s\n", book1.bookname);

	return 0;

}

枚举

枚举用来表示某些无法用数字或字母表示的基本数据变量,例如一天的时间:时分秒,一年四季,每天的课程等。枚举是一种基本数据类型,不能再分解为任何基本类型。

枚举类型定义的一般形式

  • enum 枚举名 {枚举列表} 注:枚举列表中不同数据用 “ ,” 间隔
#include<stdio.h>

enum Week
{
	Mon,//可初始化Mon=1,未初始化默认为0;
	Tue,
	Wed,
	Thu,
	Fri,
	Sat,
	Sun,
};
enum Year
{
	Spring,
	summer,
	Autumn,
	Winter
};

int main(void)
{
	printf("%d\n",Sun);

	enum Day day;
	day = Fri;

	printf("%d\n", day);
	return 0;
}

动态分配内存

常用的动态储存分配函数有三个:malloc,calloc、free。
malloc函数调用形式
( 类型说明符* ) malloc (size)
作用:在内存的动态存储区中分配一块长度为size字节的连续区域。函数的返回值为该区域的首地址。

calloc函数调用形式
(类型说明符*)calloc(n , size)
作用:在内存的动态存储区中分配n块长度为size字节的连续区域。函数的返回值为该区域的首地址。

free函数的调用形式
free( void* Pionter)
作用:释放指向Pionter的一块内存空间。

#include<stdio.h>
#include<string.h>
#include<crtdbg.h>
#include<corecrt_malloc.h>
#pragma warning (disable : 4996)

int main(void)
{
	char charArray[100];
	char* charP;

	strcpy(charArray, "chararray");
	charP = (char*)malloc(500 * sizeof(char));

	if (charP == NULL)
	{
		printf("没有分配到内存\n");
	}
	else
	{
		strcpy(charP,"成功分配了动态内存");
	}

	printf("charArray = %s\n", charArray);
	printf("charP = %s\n", charP);


	charP = (char*)realloc(charP, 200 * sizeof(char));

	if (charP == NULL)
	{
		printf("分配内存失败\n");
	}
	else
	{
		strcpy(charP, "内存分配成功。");//strcat  strcpy
	}

	printf("charArray = %s\n", charArray);
	printf("charP = %s\n", charP);
	//Pionter
	free(charP);

	return 0;
}

位运算

  • 六种位运算符
&I^~<<>>
按位与按位或按位异或取反左移右移
  • & 参与运算的两数各对应的二进制相与,只有对应的两个二进位均为1时,结果才为1,否则为0。
  • I 参与运算的两数各对应的二进制相或,只有对应的两个二进位有一个为1时,结果就为1。
  • ^ 参与运算的两数各对应的二进制相异或,当对应的两个二进位相异时,结果为1。
  • ~ 为单目运算符,具有右结合性,其功能是对参与运算的数的二进制位求反。
  • 左移运算 为双目运算符,其功能是把参与运算的数的二进制位向左移两位,高位丢弃,低位补0。
  • 右移运算 为双目运算符,其功能是把参与运算的数的二进制位向右移两位,低位丢弃,高位补0。注:对于有符号的数,在右移时,符号位将跟随移动,当为正数时,最高位补0,而为负数时,最高位,符号位为1。
#include<stdio.h>

int main(void)
{

	int x = 3;//0011
	int	y = 5;//0101
	printf("%d\n", x & y);
	//0011
	//0101
	//0001=1
	int n = 060;//   八进制
	int m = 017;//
	//0011 0000
	//0000 1111
	//0011 1111=63

	printf("%d\n", n | m);

	int i = 1;//0001
	int j = 2;//0010

	i = i ^ j;//i=0011
	j = j ^ i;//j=0001
	i = i ^ j;//i=0010

	ChangeNum(i, j);
	printf("i = %d, j = %d\n", i, j);


	return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值