啊啊啊啊,即使写了两年的C++代码也免不了刷题的痛苦,而且还是语言题,但是这样也能学到不少知识呢。

一阶段

  1. 一个C语言源程序是由(函数组成

  2. C语言规定,在一个源程序中,main函数的位置(可以任意

  3. 在C语言中,一个函数的函数体一般包括 (参数)和 (返回值

  4. 上机运行C源程序过程:

    编辑:输入源程序并存盘(.C)

    编译:将源程序翻译为目标文件(.OBJ)

    链接:将目标文件生成可执行文件( .EXE)

    运行:执行.EXE文件,得到运行结果。

  5. 一个函数是由两部分组成的,它们分别是(函数头) 和(函数体)。

  6. \ 是个转义字符,比如 \x 表示的是十六进制的数字,而 \0 表示的是一个八进制数字。

  7. 十六位PC机中:char<int<long int<=float<double

  8. 实型 数据就是 浮点型

  9. 不同类型数据经过表达式计算之后,最后的结果是 表达范围最大 的类型。

  10. C语言中 .1 表示的是 0.11.表示的是 1.0

  11. printfmain 这些 非关键字 可以作为变量名使用!

  12. 逗号表达式整体的值为 最后 一个表达式的值。

  13. 只要句子里面包含 , 那么这个语句就是逗号表达式,不属于 各种其他语句如 循环语句、赋值语句等等。

  14. 复合运算语句 如 :A+=B+CA*=C-D 这些,先计算等号后面的 语句 B+CC-D 然后再进行 复合运算。

二阶段

  1. if(10<=x<=20) 是一个合法的语句,表示的意思是 if((10<=x)<=20) 先计算 10<+x 的值的真假,比较 true 或者 false 是否 <=20 最后返回比较的真假。

  2. switch-case 语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch(Value/Expression)
{
case Value1:
Expression1;
Expression2;
break;
case Value2:
Expression3;
Expression4;
break;
default:
Expression5;
Expression6;
break;
}
  • 注意这里Value只能是整形字符型 ,Value1/2 里面只能填写一个值,可以使用表达式(除了逗号表达式),default 可以不写。
  1. 两个case里面的字符常量不可以相等。

  2. 逻辑运算符优先级&& 高于 ||,所以 || 都是最后再运算的。

  3. 关系运算符 < > <= >= 的优先级比 ==!= 要高!

三阶段

  1. do{xxx;}while(xxx); 记得 while 后面有分号

四阶段

  1. a[2][4]={0} 会把数组里面的所有空间都初始化为 0

  2. 使用字符数组来输入字符串的时候:scanf(“%s%s”, a, b); a 和 b 就已经是地址了,不需要 & 运算。

  3. 字符串大小判断是 ASCII 一位一位去比较。That < The

五阶段

  1. 凡是函数中未指定存储类别的局部变量都为 auto 自动。

  2. 在函数内的复合语句中定义的变量在本函数范围内有效 是错误的,只在复合语句中有效。比如这个变量是在while语句中定义的,那么只能在while语句括号里面调用,出了while就失效了。

  3. func((exp1, exp2), (exp3, exp4, exp5)); 里面只有两个实参,就是exp2,和exp5 ,这是执行了两个逗号表达式。

  4. main() 里面可以说明一个函数,但是不可以定义一个函数。

  5. 函数的定义不可以嵌套,但函数的调用可以嵌套。 (因为不能在一个函数里面定义另外一个函数啊,只能说明。)

  6. 当用二维数组作为形参时,第一维的大小可以省略,但第二维的大小不能。因为传进来的实参是一个数组的第一位地址,然后实参的所有元素依次填充到形参定义的数组里面,如果第二维省略,就无法填充(毕竟列可以无限嘛),但是如果列确定,就可以根据除法确定行数。

  7. 数组传参的同时,会退化成为指针,所以在操作的时候要小心越界。

六阶段

  1. C语言中mian函数正确的声明应该是: main(int abc, char **abv),参数后者等价与 *abv[] ,这个东西在使用命令行执行的时候会用到,详细解释博客 主要是来传入命令行输入的参数,abc为参数数量,abv是一个字符串指针数组,存储命令。

  2. 两个不同类型的指针相互赋值地址会警告。

  3. 如果要对指针进行自加自减运算,那么必须是一个数组指针,并且进行了自加自减运算之后不会越界。

  4. 函数名保存的也是一个地址,可以声明一个函数指针,然后把函数地址给它,它就可以当作函数来使用。int(*Pointer)(int,int); 其中第一个 int 表示的是函数返回值类型,后面的是参数的类型。调用的时候可以 Pointer(x,y); 或者 (*Pointer)(x,y);

  5. 一个数组名,函数名,可以看作是一个常量指针,里面保存的是地址。

  6. int *p[3] p是一个指针数组,int (*p)[3] 中 p 是一个指向数组的指针。

  7. ++ 运算符表示一旦按照运算符优先级和从左往计算顺序轮到 ++ 运算符之后,前缀加就会立刻计算,而后缀加则会 等待整个计算单位结束之后,再执行 ++ 运算。计算单位分为三种:普通表达式分号结束之后,逗号表达式逗号结束之后,循环表达式单次循环结束之后。

  8. p[x] 等价于 *(p+x),指针在进行运算的时候,一定要考虑所属于的指针级数。

  9. 字符转义有三种情况,\ + 字母,\ + 三位八进制数字,\x + 两位十六进制数字,它们都被标为一个转义出来的 ASCII 字符。对于 \0jd\013,前者表示字符串结束符 ASCII 0 和 jd 字符串,后者表示一个符号 ASCII 11.