第一题
1、已知函数的原型是: int fun(char b[10], int *a); ,设定义: char c[10];int d;
正确的调用语句是( )
A: fun(c,&d);
B: fun(c,d);
C: fun(&c,&d);
D: fun(&c,d);
答案及解析 A
在C语言中是无法对数组直接传参的,调用数组全部都是调用数组的首元素的地址,别看形参是数组的形式,本质上就是个指针,所以实参传的是数组名,因为数组名代表首元素地址。而int*是指针,实参应该传的也是指针,就是&d;
所以选A
第二题
2、请问下列表达式哪些会被编译器禁止【多选】( )
int a = 248, b = 4; int const *c = 21; const int *d = &a; int *const e = &b; int const * const f = &a;
A: *c = 32;
B: *d = 43
C: e=&a
D: f=0x321f
答案及解析 ABCD
这里考察的是const对于*的位置,分别有不同的影响;
const在* 左侧,限制的是指针指向的对象,也就是解引用不可以被修改,但是指针可以改
const在*右侧,限制的是指针本身,指针不可以修改,指向的对象可以修改
所以选ABCD
第三题
3、以下程序的输出结果为( )
#include <stdio.h> int i; void prt() { for (i = 5; i < 8; i++) printf("%c", '*'); printf("\t"); } int main() { for (i = 5; i <= 8; i++) prt(); return 0; }
A: ***
B: *** *** *** ***
C: *** ***
D: * * *
答案及解析 A
注意:i是全局变量,所以只要程序中++了,就会改变的!
所以就进入了2次prt函数,第一次i=5,进入函数++到7,退出函数;
第二次i=8,进入函数不符合循环,只打印了一个水平制表符(相当于几个空格,看自身编译器);
所以答案选A
第四题
4、下面代码段的输出是( )
int main() { int a=3; printf("%d\n",(a+=a-=a*a)); return 0; }
A: -6
B: 12
C: 0
D: -12
答案及解析 D
表达式相当于 a = a + ( a = a - a*a);
第五题
5、下列不能实现死循环的是( )
A: while(1){} B: for(;1;){} C: do{}while(1); D: for(;0;){}
答案及解析 D
非0为真,0为假
循环条件非0就可以死循环