1.1.1 空白和注释
1.在C语言中,用/* */来注释掉一段代码并不是一个好主意,因为它不支持不能重复嵌套,更好的办法是用#if 指令
#if 0
statements
#endif
1.1.2 预处理指令
1.预处理指令是由预处理器解释的.预处理器读入源代码,根据预处理指令对其进行修改,然后把修改过的源代码交给编译器.
2.如果你有一些声明需要用于几个不同的源文件,在一个单独的文件中编写这些声明,然后用#include 把这个文件包含到需要使用这些声明的源文件中.这样可以增加代码的可维护性.
用#define定义一个名字,这个名字以后出现在源文件的任何地方,就会被替换为定义的值,由于他们被定义为字面常量,所以这些名字不能出现在普通变量可以出现的场合(如赋值符的左边). 可以方便以后的修改.
1.1.3 main函数
1.每个C程序必须有一个main函数,因为它是程序执行的起点.
2.在C语言中,数组参数是以引用(reference)形式进行传递的,也就是传址调用,而标量和常量则是按值(value)传递的(PS : 在本质上都是值传递)在函数中对标量参数的任何修改都会在函数返回时丢失.
3.在修改一段代码时所遇到的第一个问题就是要搞清楚代码的功能.如果在代码中加入一些东西,能使其他人或自己在以后更容易理解它,那就非常值得这样做.并且,要书写正确的注释.
4.gets函数:一行输入由一串字符组成,以一个换行符结尾.gets函数丢弃换行符,并在末尾存储一个NUL字节.
5.字符串常量(string literal)就是源程序中被双引号括起来的一串字符.
常用printf格式代码
%d 以十进制打印整型值
%o 以八进制打印整型值
%x 以16进制打印整型值
%g 打印一个浮点值
%c 打印一个字符
%s 打印一个字符串
\n 换行
补充:
转义字符
标准输出格式字符
标准输出修饰符
1.1.4
1.由于scanf函数实现的原理,所有标量参数的前面必须加上一个"&"符号,数组参数中如果出现了下表引用,也就是说实际参数是数组的某个特定元素,那么它的前面也必须加上"&"符号.
2.使用所有格式码时,(除了%c之外)时,输入值之前的空白(空格,制表符,换行符等)会被跳过,值后面的空白表示该值的结束.因此,用%s格式吗输入字符串时,中间不能包含空白.
3.对数组下标有效性的检查,必须自行编写代码,C编译器不做检查,否则可能会导致意想不到的结果.
4.&&符号如果左边的值为假则不再判断右边的值,一定为假 注意&&和&不要混用,虽然有时候结果相同
5.把ch声明为整型可以防止从输入读取的字符以外的被解释为EOF.
6. while(1)
;
1 这种写法可以避免读者误认为接下来的代码是循环体的一部分
1.1.5
1.当数组名作为实参时,传给函数的实际是一个指向数组其实位置的指针,也就是数组在内存中的地址,正因为如此,才使得数组名作为参数时具备了传址调用的语义.
1.2
1在字符串内进行搜索的函数是strchr,在字符串参数内搜索字符参数第一次出现的位置,如果搜索成功就返回指向这个位置的指针,如果搜索失败就返回NULL.
2strstr功能类似,搜索字符串.
1.5 警告的总结
1误用=操作符而不是==操作符来测试相等性(小技巧:在有常量的测试中,可以把常量放在==的左侧,这样可以让编译器来帮助我们检查一些失误情况).
1.6
1.#include 避免在一个文件中多次声明
2.使用下标前先检查它们的值.确保数组不越界.