《C和指针》学习笔记(一)第一章~第六章

一、把函数的声明放在头文件,须要的时候include头文件,的好处:     声明只须要编写一次,使之后的维护修改更容易,消除了多份拷贝写法不一样的状况 二、gets读入字符串,可能会超出数组的边界,fgets会把字符串长度做为参数传入 三、俩个环境:翻译环境、执行环境 四、交叉编译器:相似操做系统         独立环境:不具备操做系统,嵌入式 五、代码-》预处理-》解析-》优化-》目标代码-》连接-》可执行程序 六、执行:程序载入内存-》开始执行-》运行堆栈、静态内存初始化-》调用main-》程序返回 七、三字母词 八、字符转义:\?    \"    \'    \\ 九、注释能够出如今任何空格出现的地方 10多字节字符常量前加L,宽字符常量 十一、负号被解释为单目操做符而不是数值的一部分 十二、枚举类型指它的值为符号常量而不是字面值的类型 1三、若是要修改字符串要把它存在数组中 1四、写指针*时靠近名字 int *a,*b,*c; 1五、使用typedef来建立新的类型而不是#define 1六、const变量只能做用于容许使用变量的地方 1七、switch语句的case只是肯定语言列表的进入点而不是划分语句,因此必须加break 1八、while((ch=getchar())!=EOF)错误的EOF为整型,getchar返回值为整型,整->char->整 1九、强制类型转换有很高的优先级,放在表达式前面只会改变第一个项目的类型 20、++a获得的结果是a值的拷贝 不能 ++a=10 2一、&&与||都是先求表达式左边依次来减少计算量 2二、一连串的逗号表达式作判断只判断最后的那一个表达式 2三、a*b+c*d+e*f 2四、有符号的右位移操做是不可移植的 2五、大写转小写tolower()  小写转大写tooper() 2六、不能简单的经过检查一个值的位来判断它的类型 2七、在对指针间接访问以前要确保它已被初始化 2八、定义指针变量时定义为NULL,进行间接操做前判断是否为NULL 2九、指针变量能够做为左值(由于它是变量),咱们能够将解引用操做后的结果做为左值使用,它指定了一个特定的内存位置 30、间接访问操做智能做用于指针类型表达式,不能直接做用于地址 3一、一个字符型变量做为左值的时候表示的是地址,相似于字符数组 3二、内存位置不能做为左值 3三、指针加法运算的结果是一个右值,间接访问的结果是左值 3四、*++p先自增后间接访问,*p++先间接访问后自增 3五、*p++值得注意,三个步骤:一、++操做符产生p的一份拷贝                     二、而后++操做符增长p的值                     三、在p的拷贝上间接访问 3六、#include <assert.h>     void assert( int expression ); 3七、若是它的条件返回错误则终止程序 3八、指针只有俩种算数运算     指针+-整数、指针-指针 3九、俩指针相减的结果为ptrdiff_t,一种有符号整数类型,表示俩指针在内存中的距离,可能为负数 40、size_t用于指明数组长度,它必须是一个正数 4一、当使用指针运算时,要当心,确信运算的结果将指向有意义的东西 4二、指针运算只有做用于数组中其结果才是可预测的