1.初始化:初始化是一种特殊的声明,而不是一种赋值语句。
如:int a = 10;
2.任何表达式都有值和类型两个基本属性。
3.有的表达式既可以做左值也可以做右值,而有的表达式只能做右值。
4.char型和int型统称为整数类型(Integer type)。
5.要在一个平台上支持C语言,不仅要实现C编译器,还要实现C标准库。单片机等平台的C语言开发工作没有完整的C标准库。
6.函数声明不同于函数定义,只有带函数体的声明才叫定义。
声明:void drawline(void);
定义:void drawline(void){......}
函数声明时应做到以下几点:函数名、返回值类型、参数个数以及类型。
如果没有参数个数和类型,编译器不会对参数个数和类型进行语法检查,因而可能引入bug。
如果在调用函数之前没有进行声明,编译时仍然会通过,编译器会认为“已经隐式声明了该函数”(有了函数名),隐式声明的返回值是int(有了返回值类型),隐式声明根据调用时传递给函数的参数来决定隐式声明的参数类型和个数,编译器根据这写信息生成相应的指令。如果继续往下执行遇到了该调用函数的定义,轻则出现警告,重则出现错误。
7.形参和实参
形参相当于函数中定义的变量,调用函数传递参数的过程相当于定义形参变量并且用实参的值来初始化。
8.全局变量和局部变量以及作用域
一个函数中定义的变量不能被另一个函数使用。
每次调用函数时局部变量都表示不同的存储空间。
局部变量在每次函数调用时分配存储空间,在每次函数返回时释放存储空间。
全局变量的引入会带来一个隐患:其读写顺序不能很好的控制。
原则:能用函数传参代替的就不要用全局变量
局部变量可以用类型相符的任意表达式来初始化,而全局变量只能用常量表达式(constan expression)来初始化,因为其初始值要在编译的时候就要计算出来。
局部变量在使用之前一定要先赋值,否则第一次使用时其值不确定。(汇编、编译原理)