C语言是基于B语言发展而来,语法与js很多相似的地方,例如:判断,运算,循环等
不同点:定义变量不可以被修改类型,初始化变量时定义变量类型,例如:int,double
C语言有scanf("%d",&n);//输入
printf("%d",n);//输出
使用方法:
1.先引入标准库 #include <stdio.h>
2.int main(){
//...
return 0;
}
知识总结:
运算 :++n,n++,+ - * / %
判断:if else if else , swatch..case
循环:while, do..while, for
tips:循环中如果有固定次数用for,如果必须执行一次用do..while,其他情况使用while
整数类型:char,short,int,long,long
浮点数:float,double,long double
逻辑:bool
指针
自定义类型
逻辑运算符:!&& ||
,运算符
短路逻辑:&&,||,&&左边false右边不做,||左边true,右边不做
在使用bool之前需要#include <stdboool.h>
封装函数:目的:代码重用,减少复制粘贴,可维护性高
函数的定义:函数头,函数主体,如果有返回值return 停止并加上返回值
注:void 表示类型什么都不返回
函数的调用:函数调用与js类似,viod 代表没有返回类型
数组:int number[100]
单元类型 数组名称 元素数量(下标,索引)
注:数组定义后无法改变类型和大小
数组长度:
int count = sizeof(数组) / sizeof(数组[0]) // 数组的长度 = 数组占用的总字节数 / 数组元素占用的字节数
&运算符,作用:取地址
变量是保存在内存中的
左值:表达式运算的结果
指针:保存地址的变量;int *p *p就是指针,作用:修改其他函数内部变量的值。
应用:交换两数值,寻找最大值,计算两数字之计算结果
注:任何一个地址变量未得到任何实际变量地址前不能访问任何变量或数据。
函数参数列表中 int a[]等价于 int *a
数组变量是特殊的指针(const),数组本身不需要&取地址,但是数组元素需要使用&取地址
字符串:又称为字符数组,以数组形式存在
eg: char word[]={"H","e","l","l","o","\0"};
注:最后一个\0结尾不可省略,计算字符串长度时不含0
两个字符串自动连接,",""",无需和java,js + 或者php .进行两个字符串拼接,70年代的C语言只关注数字,而80年代java,python开始关注文字,字符串既可以是数组,也可以是指针,
数组:字符串在这,作为本地变量自动被回收,
指针:字符串位置不明确,处理参数,动态分配空间
总结:当构造字符串时用数组,当处理字符串时用指针
字符串的输入与输出:
eg:char string[8]
scanf("%7s",string);
printf("%7s\n",string);
以上7代表最多为7个
“”代表空字符串
int main(int argc,char const *argv[])
字符串函数
int putchar(int c);
EOF(-1)表示写失败
键盘->shell->屏幕
<- <-
shell为缓冲区,将用户输入进行行编辑进入缓冲区,当按下回车时给屏幕显示
常用的字符串函数:strlen,strcmp,strcpy,strcat,strchr,strstr
注:#include <string.h> 必须先引入string函数库
枚举:常量符号化
eg:enum color{red,yellow,green,colorNum}
枚举量
枚举比宏好,枚举有int类型,作用:定义符号量
程序结构
全局变量:作用域,定义在全局,任何函数内部可以访问,
局部变量:函数内部定义的变量,只在当前作用域内有效,无法修改影响全局变量
——func——返回当前函数名,全局变量初试默认值为0.
本地变量:
静态本地变量:变量前加(static)关键字保存上次函数退出时的变量值,
定义在函数内部的全局变量,拥有全局生存期,本地作用域,
注意:应避免使用全局变量和静态本地变量,对于多线程来说不安全
宏:预处理替换,不用分号结尾,#define定义一个宏
#define PI 3.14159
注:不能使用分号结尾,宏可以在后面加注释,宏与宏之间可以互相使用
没有值的宏变量#define _DEBUG 条件编译
预定义的宏:_LINE_,_FILE_,_DATE_,_TIME_,_STDC_
像函数的宏
#define cube (x)((x)*(x)*(x))
大程序结构:
多个.c文件,一个功能一个.c
函数的原型放在.h中
一个.c对应一个.h
系统标准库<>,自定义头文件"XXX.h"
全局变量所有c文件共享
static变量或者函数只有当前.c文件可以使用
目录结构:
MAX
mian.c
max.c
max.h
变量声明:int i;//变量定义
extern int i;//变量声明
头文件(.h)中声明变量
include 插入引用
标准头文件结构:#ifndef _ListHeader_
#define _ListHeader_
//代码段
#endif
作用:只定义一个宏,避免头文件重复引用
格式化输入输出:scanf,printf
%d整数, %f浮点数
文件输入输出 <>重定向
输入< >输出
fopen打开文件,fclose关闭文件
二进制文件:所有文件都是二进制的,文本文件是可读写的二进制文件
文本VS二进制
unix 文本
windows DOS 二进制文件
文本
优点:便于人类读写,快平台
缺点:程序输入输出格式化开销大
二进制
优点:程序读写快
缺点:读写困难,不跨平台
二进制读写:fread 读 fwrite 写
fseek(fp,OL,SEEK_END);定向到最后
long size=ftell(fp);二进制文件大小
fseek(fp,index*sizeof(student),SEEK_SET)定向到开头
按位运算
&按位与:两数都为1为1,否则为0
|按位或:两数有一个1就为1,否则为0
~按位反:把1变成0,0变成1
^按位异或:两数不相等为1,否则为0
左移:后补0
友移:前补0或者补高位,unsigned 前者,signed 后者
左移一位 *2
两位 *4
n位 *2^n
1<<2 100
1<<3 1000
移位时不要使用负数
段位:struct{
unsigned int leading:3
}
特点:无移植性,超过一个int,变成2个int
应用:操作硬件