C语言非常之经典的笔试题。
4.综合题(18道)
4.1下面代码输出是几?
int main()
{
int j = 2;
int i = 1;
if(i = 1) j = 3;
if(i = 2) j = 5;
printf("%d", j);
}
答案: 输出为 5 。
解读: 注意 if 的条件语句用的是赋值符 “=” 而不是等号 “==” ,因此条件一直为真。
4.2负数和正数的反码、补码分别是什么?
( 1 )负数的反码:对原码除符号位外的其余各位逐位取反就是反码。
( 2 )负数的补码:负数的补码就是对反码加 1 。
( 3 )正数的原码、反码、补码都一样。
4.3编译和链接有什么不同?(如对外部符号的处理)
( 1 )编译( + 汇编)生成的是目标文件 (*.o) 。编译过程中对于外部符号(如用 extern
跨文件引用的全局变量)不做任何解释和处理,外部符号对应的就是 “ 符号 ” 。
( 2 )链接生成的是可执行程序。链接将会解释和处理外部符号,外部符号对应的是
地址。
4.4函数参数的传递方式有几种?
( 1 )两种:值传递、指针传递。
( 2 )严格来看,只有一种传递,值传递,指针传递也是按值传递的,复制的是地
址。
4.5局部变量能否和全局变量重名?
答案: 能,局部会屏蔽全局。要用全局变量,需要使用 “::” 。
注意: 对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在
两个循环体内都定义一个同名的局部变量