写一篇文送给马上要考C语言的同学。这些一定要注意:
解释一下部分名词
定义/声明:对于变量,定义和声明合二为一。例如下面的语句定义一个整数变量:
int intLoop;
对于函数,定义与声明是分开的(只有C这种低级语言是分开的)。以下代码定义一个返回值的函数:
int GetSize(int Var1,char Var2) {
......
return 0;
}
在调用前,必须再次声明该函数(那么多语言只有C需要这么做)
int GetSize(int,char);
形参可以不加名字,但必须保留类型。注意最后有一个分号。
初始化:初始化即第一次给新定义的变量赋值的动作。初始化可以有两种方式,一种是在定义变量后,使用“[变量名] = [值];”语句赋值,或者直接在定义中初始化,使用”[数据类型] [变量名] = [初始值];“语句。
变量的生命周期与作用域:生命周期指变量从定义开始,到哪里就会被销毁。作用域指变量在定义后,在哪一个部分是可以操作的。最简单的方法是判断变量所处的语句块。两个花括号“{}”内就是一个语句块。语句块外的变量,语句块里面可以操作。语句块里面定义的变量,语句块外面不可用。(因为在语句块内定义的变量,在语句块在执行完后,会被销毁以释放内存。)
三元运算符(又称判断运算符):如果一条使用if的判断语句很简单,建议改写为三元运算符形式,使用格式为:
[判断条件] ? [条件成立执行的语句] : [条件不成立执行的语句]
算式的”op=”写法:“OP=”写法可以简短代码。你可以把“[变量] = [变量] [运算符] [值];”简写为“[变量] [运算符]= [值];”下面给出一个例子:
a = a + 3;
可以简写为:
a += 3;
参数的按值传递和按引用(也成按地址)传递:按值传递和按引用传递最明显的区别是会不会改变被当作实参的变量的值。举个例子:
//摘自西理工2013年春季学期B卷第二大体第8小题 #include <stdio.h> void f(int x, int *y) { x %= 10; *y = *y/10+x; } int main() { int a=88,b=99,*c; c =& b; f(a,c); printf("&d,%d\n",a,b); return 0; }
本例输出 88,17。为什么不是8,17?来看f函数。f函数接受两个参数x和y,其中y前面带了个,说明y是按引用传递的,因此在f(a,c)执行完后,y的值改变了,变成了88%10+99/10=8+9=17。相反,x前面没有,说明x是按值传递的,即使有“x %= 10”,但是x的值并不改变。用通俗的话解释,参数按值传递时,系统把实参的值复制了一份给了调用实参的函数,而按引用传递时,系统把实参的地址给了调用实参的函数,这就相当于直接把实参抛给了调用实参的函数,因此值就改变了。
一些要注意的地方:
- for语句:1)注意循环次数,不要多1或少1.
2)在for语句里直接可以定义循环计数变量,如:
for(int i = 1;i <= 10;i++) { ...... }
- switch语句:1)注意格式。
2)“case”后只能是常量表达式。
3)不能switch字符串。(除了C语言,其他语言基本都可以)
- if语句:1)注意格式
2)至关重要的一点, 如果在一个有返回值的函数里使用if语句控制返回值,确保所有情况都包含在内,否则,编译器会弹出警告。举个例子:
int Function(int num) { if (num >= 1) return 1; if (num == 0) return 0; }
以上的代码会导致编译器弹出警告,内容是:“Function()不会在所有路径上返回值” 或者“control reaches end of non-void function [-Wreturn-type]”。分析一下,Function()函数中在num大于等于一和num等于零这两条路径上有返回值,但Function()并没有处理num小于零的情况,那么如果num被给了一个负值,系统就会抛出异常。如果你的代码里没有异常处理语句(try…catch…),那么程序就会崩溃。解决的方法很简单,一是可以在写函数时考虑到所有情况,而是在情况太多无法囊括所有的时候,给函数里添加返回默认值的语句,例如“switch”结构里的“default”语句。
- 结构体:访问结构体中的元素,使用英文句点“.”
- 整数变量的大小:在32位计算机中,int(Integer)被称为“32位有符号整数”,因此占用32bit/8=4Byte(4B)的内存(RAM)。同时,指向int的指针也是4字节。
- 字符串的使用:C语言没有字符串变量(也就只有C没有),因此你必须用字符数组(char[])来代替。注意数组在定义时要比字符串字数多留出一个元素位给空字符(NULL、\0)
- 数组定义:数组定义时“[]”里面只能为常量:数字或宏定义常量。所谓宏定义常量即“#define [常量名] 数值”语句中的常量名。(也就只有C不能动态定义数组)