C语言概述
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。跨平台的特性,以一个标准规格写出的C语言程序可包括类似嵌入式处理器以及超级计算机等作业平台的计算机平台上进行编译。
诞生于贝尔实验室 丹尼斯·里奇 以肯尼斯·蓝·汤普森设计的B语言为基础发展来的
1989年 第一个完备的C标准,“C89” ANSIC 2018最新C18
特点:(1)简洁的语言(2)具有结构化的控制语句(3)丰富的数据类型(4)丰富的运算符
34种运算符(5)可对物理地址进行直接的操作(6)代码具有较好的可移植性(7)可生成高质量、目标代码执行效率高的程序
1、广泛性 2、简洁性 3、结构完善
C语言的缺点主要表现为1、数据的封装性弱
2、语法限制不太严格
##C语言 位运算
1TB 1024GB
1GB 1024MB
1MB 1024KB
1KB 1024B
1byte 8bit
二进制转十进制
(10110)2=(22)10
8421法
(16 8 4 2 1)
101101 11001001 10010111
十进制转二进制
37 100101 逆转8421 最近的数
33 10001
八进制转二进制
567 101 110 111
234 010 011 100
105 001 000 101
二进制转八进制 右往左
011 010 111 100 110 32746
011 010 111 101 110 32756
011 101 110 101 011 35653
100 101 101
1110010110
11011101011
十六进制转二进制
109CBE 0001 0000 1001 1100 1011 1110 ABCDEFG10 11
A017B
二进制转十六进制
1 0110 1011 16B
1101111010
100110011101
正数的 原码 反码 补码 不变 8位
负数原码最左为1 反码全部取反0变1 1变0
35 -27 -17 1001 0001 1110 1110 1110 1111
数据类型
char 字符型 特殊的整型 占据1个字节(1byte–8bit)
int 整型 占据4个字节 (32位)
浮点型
单精度浮点型float 4byte
双精度浮点型double 8byte
双长精度浮点型long double 8byte 或者 16byte
(%f)小数点后6位
运算符与表达式+ - * / %
5/2=2 5.0/2 = 2.5 🈲15.5%4 ❌ -15%4=-3 -15%-4=3 15%-4=3 6%15=6
真为1 假为0
a&&b 不为0 则为1 1代表正确
a=10 b=5
a!=5|| b++ b=5
sizeof 字节数
char +int =int
算法的基本结构
顺序结构 选择结构 循环结构
复合语句
if语句 没有大括号跟一条
if else if else if else if
else
switch(整形 字符型 枚举型) break;
*
条件表达式
max=a>b?a:b;
循环结构
while
int i=1;
while(i<=10){
printf(“%d\n”,i);
i++;
}
do while 都执行一次
int i=1;
do{
printf(“%d\n”,i);
i++;
}while(i<=10);
for语句
for(int i;i<=10;i++){
printf(“%d\n”,i);
}
中断语句
break 跳出本层循环,执行循环后的语句
continue 跳出本次循环,执行下次循环
函数
函数的调用 先声明后调用
函数形式:
返回值类型要与函数类型相同
数组
一维数组
int a[10];
int a=5
int b[a];错❌
int a[5]
sizeof(a) 4*5=20
int i=0;
int a[10]={50,60};
for(i=0;i<10;i++){
printf(“%d\n”,arr[i]);
}
二维数组
int a[2][3] 定义的2个长度为3的一维数组
结构体 类似JAVA的实体类 Struct
是一种可以由我们自己定义的数据类型
是由一系列具有相同类型或不同类型的数据构成的数据集合
先声明后定义
struct student{
int num;
int score;
float avg;
}
//声明
1.struct student Tom={90,90,90};
Tom.num=12;
//定义
2.struct student{
int num;
int score;
float avg;
}Jerry,Jun;
3.struct {
int num;
int score;
float avg;
}Tom
typedef
不是用来创造类型,而是给已有的类型取别名
typedef int TYPE
#define SIZE 5
int a;
TYPE b;//相当于int b;
typedef struct student{
int num;
int age;
}STU;
STU Tom
struct student Tom;
结构体数组
struct student{
int num;
int score;
float avg;
}
struct student class2 [3]={{90,90,90},{90,90,90},{90,90,90}};
struct student{
int num;
int score;
float avg;
}class3 [5];
结构体
union cata{
int num;
int score;
};
struct student{
int num;
int score;
float avg;
union cata ct;
};
struct student sd;
sd.ct.num=100;
struct student te;
te.ct.score=100;
函数
函数的递归和调用
函数作用域
指针
printf(“%p\n”,&a)
&a 地址(指针)
指针变量
int a;
int *p; //存放同一类型的
a=10;
p=&a;
p=100 ❌
p= c ❌
指针变量的使用
2.
3.
野指针
空指针
数组的地址![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6959cbae6ab0d784b268d2ee6fa89d3c.png)
指针与一维数组
p=a // p=&a[0];
p=&a[2] p+3 p+5 有地址 野指针
p[1]=40
p=a // p=&a[0]
a[1] *(a+1) *(p+1) p[0]
总结
指针与二维数组
地址
内容*(地址)
行指针
字符常量’ ’ %d %c
大写转小写 +32 char b=‘A’; b=b+32; 97 a 65 A
\x hh 1-2位 16进制 \ddd 1-3位 8进制
字符串常量" "%s![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/577f610ffa33797eddaca90a19b3606a.png)
“abcDEF” 7字节 \0 结束标志
size of(“”)字节
strlen(“”)长度
字符数组
爆了 \0 Strl[6]
第二个是字符串
char str2[5]=“ABCD”;
str2[1]=‘X’; AXCD
str2=“ERTH”;❌
str2[5]=“HIJK”;错❌
字符串与指针
char str2[5]=‘ABCD’
printf(“%s\n”,&str[2]) CD
printf(“%s\n”,str) ABCD
char *p=‘HIJK’;
printf(“%s/n”,p) HIJK;
字符串的输入与输出
char a[10]=“ABCD”;
char ch=‘X’;
printf(“%s\n” a) ABCD
printf(“%c\n”,ch) X
putchar(ch) X
puts(a) ABCD 自动换行
strcpy(a,b) 把b复制给a
连接函数
strcmp 比较值大小 F>E a>b 正数
a<b 负数
相等为0
strcmp(a,“男”)==0
文件
file *fp
fopen();
fclose();
文件的读写
ch=fgetc(fp); E
fputc(‘A’,fp);
!feof()==0
文件的读写
fgets (str,5,fp)
fputs(str,fp)
fwrite(&cl[0],sizeof(NODE),3,fp)
fread(&cl[3],sizeof(NODE),1,fp);
pritntf(cl[3].name)
pritntf(cl[3].tel)
文件的定位读写
fseek(fp,0,SEEK_SET) 读第一个信息
fseek(fp,sizeof(NODE),SEEK_SET) 读第二个信息
fseek(fp,-1*sizeof(NODE),SEEK_END) 读最后一个信息