第一周
1.数据类型int char short long int long long double float boor void longdouble
2.sizeof关键字 计算变量或数据类型所占的字节个数
3.定义:定义就是为这个变量分配一块内存并给它去上名字。这个名字就是变量名。
4声明:有两重含义,一告诉编译器这个名字已经匹配到一块内存上了。二告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量名。
定义和声明最重要的区别:定义创建了对象并为这个对象一块内存,而声明的时候是没有分配内存空间的.
预编译只进行替换,不可执行
编译时,进行语义,词法的转变,在进行链接变成可执行文件
枚举若不进行赋值,则和左边的值有关,依次递增1.枚举值可以相同
枚举变量自身不能进行运算,但是可以和整型运算
\转义字符有两种意义:可以转字母(小写)表示其他意思,也可以让字符表示成本来的意思
+三位八进制数字的范围0-255,是扩充ASCII码的最大表示范围
\x+数字表示十六进制数,范围0-255
“字符串+\0”占两个字节,空字节也占一个字节 eg:“yhping”空间大小为7,字节长度为6
制表符和空格的区别
语句
1.语句无论多少句都必须在大括号中
2.getchar 获取键盘中字符串 ctype.h用来确定包含于字符数据中的个数
程序是静态的 进程是动态的,是随时间流失的,是有生命周期的
内存大致分为:代码区 (数据区 堆区 栈区)都放数据
全局变量在数据区 局部变量,函数,形参在栈区
可见性(作用域)和生存期
作用域:针对编译和链接的过程(原码)
函数中的标识符只在函数中有用 在文件作用域的在全局有用
生存期:针对的是程序的执行过程
局部变量的生存期 全局变量的生存期 动态生命期malloc()开始,free()结束。
数组(类型+大小)
定义数组的方式:int【必须是常量】宏常量 常变量 字面常量都行
操作符:单目,双目(左值可读可写,右值只可读),三目 取模看附录3
函数的特点:根本特点:功能单一 其他特点:小模块,一般不超过50行,超过则很难把握功能
函数的构成:函数的类型+函数名+参数
函数声明时,形参可以省略,但类型不可省略
函数和声明的区别:函数有大括号
函数和变量的区别:函数任何一个形参都对应一个类型,变量不是
有两种解释:1. a=a*(b+c)优先级高 2. a=a*b+c
三目表达式的用法:max=a>b?a:b意思是将a和b中较大的数赋给max
前置++和后置++的用法:i++先运算在自加,++i先自加在运算
内存可以分为很多个存储单元,一个存储单元对应一个字节
前缀0x表示十六进制 前缀0表示八进制 没有前缀表示十进制 一个十六进制占4个字节
cpu有两种运行模式:实模式 保护模式
*在c语言中的3种意义:运算符 指针声明 *p指向指针所指的内容
&在c语言中的2种意义:按位与运算 取地址 &&表示并且
Printf的用法:printf(“%d\n”,a)打印十进制 printf(“%o\n”,a)打印八进制 printf(“%x\n”,a)打印十六进制
指针(大小为4个字节,只存放首地址)32位——4字节 64位——8字节
地址自上而下是从低到高,高位数存放高地址,地位数存放低地址
Int a=10 Ip=&a ip=a ip存放谁的地址ip就是谁
关键字
Typedef 一般单用,不能与auto extern mutable register同时使用
作用:将合法的变量名变成类型,不能存放数据
Intpint是合法指针,Typedef Intpint , pint就变成了一种类型,是指针类型
pint a,b表示a,b都是指针类型,由于没有初始化所以都是随机值。
静态关键字:修饰局部变量,在函数第一次被调用时初始化一次,之后不再初始化
修饰全局变量,在修饰全局变量时,生存期不变。改变了可见性,超出本文件不在执行。
在程序中:int a=10;叫初始化,a=0;叫赋值
编译器在执行过程中,用标记域来知道函数是不是最后一次被调用
关键字:
Extern:Extern int fun()表示fun函数不在本文件中,但是在同一个项目的其他文件中,在编译链接时本文件可用 --cdecl表示调用方式 (?fun@@YAXXZ)重复包含头文件
Const:修饰变量和数组,修饰时必须进行初始化。表示不允许在写入文件,只可以读取。
bool类型只有true和false; 在c语言中0时false,其他情况都时turn,一切非零则为真。
Int*p=NULL表示假,char ch=’0’表示真,char ch=’\0’表示假 ==表示等于,=表示赋值。
算术运算符运算结果都为bool类型 逻辑表达式运算结果也是bool类型
空语句
仅由分号构成,不执行任何操作。如果在for,if,while等语句中误用分号,则可能造成程序提前结束
函数
自定义的函数构成:返回类型+函数名+形参列表+函数体
1.在函数中计算的值会存放进临时空间,在主函数中拷贝最后的
结果,临时值只能拷贝,不能修改。
2.将变量名付给形参的时候是一个压栈的过程。
3.c语言中不允许函数的嵌套定义,但可以嵌套调用,因为函数是最小执行单位。
函数的调用机制:
1.建立栈空间
2.为被调用的函数中的局部变量分派空间,完成参数传递
3.现场保护:主函数运行状态和返回地址入栈
4.执行被调用的函数体
5.释放被调用函数中被占用的空间
switch语句 多分支结构 替代简单的if语句
基本格式:(switch,case,break和default都是关键字)
switch语句必须跟整形变量表达式,不能是浮点数和字符串。
case后面只能跟整形常量或者是结果为整型的表达式,并且case后面跟的必须是唯一值,也就是case后面的值必须是唯一的。 表达式case(‘a’+’A’)和case(‘a’||’A’)都不对
当整型变量表达式和case后面的常量相同时,则执行此case后面对应的语句,如果遇见break,程序执行完成,否则一次按照顺序执行后续语句。当输入的情况不在case类型内则执行default。如果没有default,则程序什么都不执行,继续执行后续程序。
应用场景:作为菜单的选项。
循环语句:
while循环:先判断,后执行。
do…while循环:先执行,后判断。
跳转语句:
break:语句只能在switch语句和循环语句中使用,是提前终止循环或跳出whitch语句,执行下一条指令
continue:只能用在循环语句中,用来终止本次循环,开始下一次循环的执行
第二周
跳转指令:
goto语句用时和标号语句一起用,用时尽量向下跳 系统角度:让寄存器缓存的数据失效,cpu速度变慢
特点:只能在一个函数内转移,不能跨函数跳转。
return:用于结束本函数的执行,若用在被调用的函数中,则结束此函数。
exit()函数只要被执行,整个程序都将终止。
Return和exit()的共同点是,在主程序中应用时,结果相同。
数组:<类型>数组名[<元素数量>]元素数量必须是整型常量表达式
整型常量包括:字面常量,宏常量,常变量,枚举常量,运算结果为整型的表达式。
数组存储空间是连续的,从低地址到高地址,数组的类型是由元素的类型和数量所决定的。
sizeof(ar)/sizeof(ar[0])表示计算数组ar中的元素个数
数组之间不能作为整体直接赋值为什么
数组指针里面存放的元素是地址
Key_value:key是关键字、value是值。
key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。
Key-value数据库是一种以键值对存储数据的一种数据库。每个键都会对应一个唯一的值
数组:有类型和大小两种属性 数组看不见的属性:储存空间是连续的
指针:*和变量名结合,不能和类型结合; *在不同的环境中意义不同
指针类型: 野指针(int *p;)、空指针(int *s = NULL;)、失效指针/失能指针
指针在32位系统中占4字节;在64位系统中占4/8字节
*ip = &a : a的地址是存放在ip中,*起声明作用
当取某个变量的首地址时,实际取的是低地址
0x%08x : 取地址符
类型不同:指针+1加的结果不同,因为字节数不同; 指针对内存的操纵能力也不同
CPU的寄存器有:EAX EBX ECX EDX EIP EBP ESP ESI EDI
a+b=c表示:把a的值放入寄存器中当临时量(具有常性),把b的值累加入寄存器,最后把寄存器中的值给c
ar 与 &ar[0]等价 在函数中依次定义的变量在内存中不一定是依次分配空间的,不同的编译器内存分布情况不同
x=*p++; 相当于 int x=*p;p++; 整个表达式结束进行后置++
数组名作为首元素时,是一个指针常量,不能进行++ar或ar=ar+1,常量只能读值不能写值,在内存方面若移动整个数组会在内存中移动。
P[2]和ar[2]即*(p+2)和*(ar+2)第二种方式访问方式更快。
简单寄存器:eax:32bit ax:16bit ah:16bit中高八位 al:16bit中低八位
类型相同的指针和指针可以相减,不能相加,相减得到的是元素个数。类型不同的指针不能进行运算
指针和整型的加减是对地址的加减
const与指针结合有两个作用:1.改变自身指向 2.改变指向对象的值
const 修饰指针时,必须初始化 用const修饰的常量必须用const修饰的指针指向
eg: const int p2=&a和 int const p2 p2可以改变自身指向和读p2指向的值,但不能改变指向的值
int const p4=&a p4本身不可以改变自身指向,但可以改变和读取指向的值
const intconst p5 p5只可读值,自身指向和指向的值都不可改变
总结:const在前面,不能改变指向值 const在后面,不能改变自身的值即挨着指针时限制指针自身
数组在不同的地方有不同的叫法:在局部变量中定义叫数组,在函数中作为形参时为指针,作为形参时必须给行元素个数