环境
Windows环境可使用Visual Studio 2019,Mac环境可使用fusion虚拟机配置。
基础知识
c语言注重调试能力,注重计算机原理的解析,每一个项目编译后是一个exe可执行程序。
 数据类型的分类可分为基本数据类型、构造类型、指针类型*、空类型(void)四种。其中,基本数据类型分为整形 int,字符型 char,实型(浮点类型),构造类型分为数组类型 [ ],结构类型 struct,联合类型 union,枚举类型 enum。
 在Visual Studio 2019中观察内存使用十六进制,为什么内存数据要使用十六进制去看?就是非常高效,两个字符就可以表示一个字节。
 在程序员计算器中,DWORD代表4个字节
 x86结构是小端存储(英特尔、AMD),低位在前,高位在后
 1位—1bit 存储0或1,1字节—1byte=8bit,1kb=1024字节,1Mb=1024Kb,1Gb=1024Mb,地址就是4个字节。
 磁盘 1G=1000 000 000字节
 %d以十进制方式去输出某一个整数,%f以浮点形式输出对应数据。
 3e-3=0.003,e代表10的次幂,注意e(或E)之前必须有数字,且e后面的指数必须为整数。
 正确示例:1e3、1.8e-3、-123e-6、-.1e-3
 错误示例:e3、2.1e3.5、e3、e
 int 、float占用4个字节,一个字符变量占用一个字节大小的空间—%c
 转义字符:\n(还行)、\b(退格)、\反斜杠
 ‘a’是字符型常量,"a"是字符串常量,二者是不同的,通常字符数组用来存储字符串。
 字符串常量"CHINA"占用的内存单元不是5个字符,而是6个字符,即大小为6字节,最后一个为’\0’,然而在输出时不输出’\0’,因为’\0’无法显示。
混合类型运算
int i=5;
 float j=i/2;//j输出的还是2
 float k=(float) i/2;//k输出的是2.5
 读取标准输入—scanf,缓冲区为空时,scanf才会阻塞,scanf在读取整形数,浮点数,字符串时,会忽略’\n’(回车符)、空格符等字符,混合输入时,每次在%c之前加上一个空格。
 scanf发生错误时返回EOF,EOF就是-1,什么情况下scanf会出错?ctrl+z+回车。
 stdin是标准输入,清空缓存区—rewind(stdin)
 ret=scanf("%d%c%f",&i,&c,&f);ret代表成功读取了多少个数据
 %s—读取字符串,对应后面写字符数组名、字符常量,%4.1f—总共在屏幕上占4位,小数点后一位,%3d—默认靠右占3个空格。
 0假1真,非零值即为1
 优先级 ! > && > ||
 //判断两个浮点数是否相等,必须用下面的方法:
 float f=234.56;
 if(f-234.56>-0.0001&&f-234.56<0.0001){
 printf(“f is equal to 234.56\n”);
 }else{
 printf(“f is not equal to 234.56\n”);
 }
自增,自减运算符及字节运算符
i++;//i=i+1;
 j=i++>-1;//j=i>-1;i++;
 sizeof(i);关键字,运算符
 算数运算符的优先级高于关系运算符、关系运算符的优先级于逻辑或运算符。
 访问越界会造成数据访问异常,数组在传递时,元素个数传递不过去。
 在子函数中,可以修改数组元素
 初始化字符数组时,一定要让字符数组的大小比看到的字符串的长度加1。
结构体
gets();//遇到\n就结束
 fgets(p,sizeof§,stdin);//p读到地址指向的空间,sizeof§读取多少个字节,stdin从标准输入里读数据。
 typeof的作用就是起别名,为什么要对int起别名,为了代码即注释。
 typedef的使用
typedef struct student{
int num;
char name[20];
char sex;
}stu,*pstu;
typedef int INTEGER;
int main(){
stu s={1001,"wangdao",'m'};
pstu p;//stu *p1,那么p1也是一个结构体指针
INTEGER i=10;
p=&s;
printf("i=%d,p->num=%d\n",i,p->num);
}
给结构体类型起别名,叫stu,起结构体指针类型的别名,叫pstu。
 C++的引用:
 把&写到形参位置是C++的语法,称为引用
void modifynum(int& b){
b=b+1;
}
int main(){
int a=10;
modifynum(a);
printf("a=%d",a);
return 0;
}
纯c形式:
void modifynum(int* b){
++(*b);
}
int main(){
int a=10;
modifynum(&a);
printf("a=%d",a);
return 0;
}










