2021-07-27
作者:互联网
C语言学习
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;
}
标签:typedef,27,07,int,charP,char,2021,printf,include 来源: https://blog.csdn.net/L__sh/article/details/119144404