1:C语言符号表:
C语言里面几乎所有的符号都在这里。
正因为拥有这些符号和关键字和数据类型,我们才可以编程序。
2:注释:
1:注释符号://,/**/。
2:注释将在编译的过程中被空格代替,注释也是非常重要的,方便程序员之间的交流。使用//比较好,/**/的成对出现嵌套的时候很容易出错。双斜杠是可以嵌套使用的。建议大部分注释使用//。
3:int/*..*/num;编译器认为是正确的,编译器认为之间的注释就是空格。
4:写注释的注意事项:
1:注释应该是准确易懂的,没有二义性的。一定是准确的。
2:注释不能太多,代码才是核心。
3:注释应该是对代码的一种解释。注释一定要写的很清楚。
4:写程序也不应该缩写的过多(国外经常缩写,难懂)。
5:不要以聊天的方式来书写注释。
3:接续符:
作用:将当前行和下一行连接起来。
1:编译器会讲反斜杠剔除,跟在反斜杠后面的字符自动接到前一行
2:反斜杠之后不能有空格,反斜杠的下一行也不能有空格。
在使用接续符的时候,并不意味着这里有一个换行,仅仅表示下面还有内容。仅仅是代码层次的换行。编译器会自动将几行做成一行。
4:单引号和双引号:
单引号:数值,字符常量。仅仅是数值,它的类型可以认为是字符,整数,但肯定不是指针地址。
双引号:地址,字符串常量。它的类型就是地址,字符串的首地址。
char c = "s";//一般的编译器可能编译不会通过,如果便已通过,那么字符c里面保存的只有s的ascii码,没有后面的结束符。
5:逻辑运算符:
&&:从左向右,为假停止运算。
||:从左向右,为真停止运算。
!:0->1。1->0。
三目运算符:返回左值。
#include"stdio.h"
int main()
{
int i = 0, j = 0;
if(++i || ++j)
{
printf("i:%d j:%d",i, j);
}
}//最终打印i:1 j:0。因为后面一个++j没有执行。这里成为逻辑运算的短路!
逻辑或是从左到右地判断,只要遇到真,后面的就不执行了。
逻辑非:可以理解为true转为false,false转为true。取反操作后得出来的值永远只可能为0或者1(1为true,0为false)!
三目运算符:编程的时候使用的比较频繁。例如去最大值最小值等。三目运算由一个条件和两个值组成。// 表达式?真值:假值
他会先判断表达式是否为真,如果为真就返回第一个真值,为假则返回第二个假值。三目运算符返回的最终为值。可以通过取地址以及解来把左值变成可更改的值。
int i = 10, j = 20;
*(i < j ? &i : &j) = i>j ? i : j;
6:自增自减运算符:
在for等循环里面用的比较多。也经常拿来做试题。
int i = 0;
int j = (++i) + (++i) + (++i);//这种行为是C语言所未定义的行为,未规定死的,大目前绝大部分编译器会先将i计算出来之后再计算加法,这里其实是与++与+的//优先级是没有关系的。
int x = (++i, i++, ++i);//最后x的值会等于i的值。这两种是没有任何含义的。自己的代码也尽量不要出现这种代码。
7:面试宝典贪心法:
贪心法是编译器的一种特性。总是读入最多的符号,例如:int i = 0;
int j = ++i+++i+++i;//会报错。
//编译器认为是++i 1++ +i++ +i;
//分割为((++i)++) + (i++) = +i;//体现就是每次读入最多的符号。
编译器里面贪心法是:在相同优先级下会使用贪心法来读如能够读入的最大最多的数值。读取第一个符号后他会继续往后面读,直到最多且成立,将之作为整体,然后再往后面读入最大量的符号。
8:优先级的处理准则:
1:没必要记住很多优先级,也没必要依赖优先级表来做,不可能其他程序员拿着表来看你的代码。可以使用小括号来表明就可以了。除非所用的符号优先级已经很明确(+-*/等)。如果有指针和其他的混合运算。就最好使用小括号来表明优先级,方便以后查看,也方便别人看代码。