TIP1:
“=”表示的是赋值符号它是一个操作符而“==”是比较符号。
比较符号这样书写if(flag == x){}就不会导致“==”误写成“=”依然通过编译。
TIP2:
C语言中“&&”表示取并的逻辑运算,而“&”表示按位求与操作。
“||”表示取或的逻辑运算,而“|”表示按位求或操作。
TIP3:
C语言中编译器总是用贪心算法读入符号,即C语言总是不断的读入字符组成C语言的语法符号,直到它不能成为一个符号为止。
例如:b---a == (b--)- a;
TIP4:
C语言总是把以0开头的数字符作为8进制数。例如:123 == 0x85而 0123 == 0x53; 二者大小大相径庭。
TIP5:
单引号括起来的是一个代表字符的整数,而双引号括起来的代表的是一个字符串首地址的指针,二者有着本质的区别。
int X = 'C';正确
int X = "C"; 错误
char *px = "C"; 正确
char *px = ‘C’; 错误
TIP6:
在紧接着if、for等条件语句后要紧跟着语句时不能多一个分号。
例:
if(x > b);
x = b;这就是无论x是否大于b。x = b;都会被执行。
也不能在一些语句后遗漏一些分号
例:
if(x > b)
return
b--;
a--;这样返回的就是return b--;了。
TIP7:
如果定义了函数fun();调用时也要fun();即使其没有参数,如果fun;只是计算了它的函数地址。
TIP8:
C语言中else始终与同一括号的内最近的未匹配的if相结合。注意要保持缩进这才是良好的编程风格。
例:
TIP9:
关于数组的两点注意:
A:C语言中没有多维数组的概念。二维数组无非是一个以一维数组为元素的一维数组罢了。
数组的大小必需在编译期就被一个常数所确定。
B:对于数组我们能确定的就是其大小以及该数组下标为0的元素的地址而数组名这个变量存储的就是这个地址。
也就是一个常指针。
TIP10:
定义数组a[10];只有在sizeof(a);时它代表的是整个数组。其他时候代表的都是数组下标为0的元素的首地址。
TIP11:
要始终记着:C语言中没有所谓的二维数组、三维数组,只有一维数组。
例:定义数组iAAnode[4][6];代表的是iAAnode[0]的地址。
也就是指向iAAnode[0]的指针同理它是一个(ing)[6]型指针,那么iAAnode[3]表示的是一个数组名。
于是我们有
int *p = iAAnode[3];
int *p = *iAAnode;
int (*p)[6] = iAAnode;
*(*(iAAnode + 3)+5) == *(iAAnode[3]+5) == iAAnode[3][5];表示的是最后一行最后一个int元素。
TIP12:
字符串代表的是内存中一块包含字符串本身及“\0”结束符的内存首地址。strlen返回的是字符串的字符个数不包括“\0”;
TIP13:
C标准允许取数组中实际不存在的“溢界”元素的地址用来赋值与比较。
TIP14:
C语言规定了四个运算符的求值顺序:
A:a||b 先对a求值,如果a为假则对b求值。如果a为真,则不再对b求值、
B:a&&b 先对a求值,如果a为假则对不对b求值。如果a为真,则再对b求值。
C:(a)? (b) : (c);
先对a求值,如果a为真,再对b求值c不再求值。反之,再对c求值不再对b求值。
D:a , b; 先对a求值,丢弃a的值。再对b求值,将b的值作为整个表达式的值。
但是要特别注意的是函数中形参列表中的逗号并非逗号表达式。
TIP15:
C语言中的函数的返回值如果显示的声明则默认为int型。
TIP16:
每一个外部变量(全局变量)可以声明多次但只能定义一次。当用一个static修饰一个外部变量或函数时,则这个对象只在当前文件中可见,其他文件不可见。
TIP17:
一个未声明的标识符,后跟一个括号。则它视为一个返回为整型的函数。
TIP18:
sizeof()返回的是一个对象的内存占用的字节数。是一个无符号的数。
TIP19:
关于宏:
宏定义的符号是#define后第一次出现空格的之前的所有字符组成的字符串,但这只在宏定义时起作用。
例:
#define f(x) (x++) 预编译器在编译时是用f(x)代替(x++)
#define f (x) (x++) 预编译器在编译时是用f代替 (x)(x++)
但是如果程序执行时有(x++) 则用f (x) 代替。
TIP20:
宏与typedef的区别
例:
#define PType1 char *
#define char * PType2
定义两个变量:
PType1 pa1, pb1;
PType2 pa2, pb2;
pa1表示指向char型的指针。
pb1表示char型变量。
pa2与pb2均表示一个指向char型的指针。PType2 是一个与char *有相同功效的数据类型。