- 相关推荐
c语言面试题及答案
函数指针:
定义:typedef void (F1)(int p1, int p2)
typedef void (*F2)(int p1, int p2)
test (int p1, int p2);
F1 * fp1;
F2 fp2;
F1 fp3;
问: 语句
fp3 = test;
fp2 = test;
fp1 = test
是否成立?
答案:第一条语句有错,其余两天语句正确。
指针运算:
int *p1, *p2;
int value;
p1 = (int *)0x500;
p2 = (int *) 0x508;
value = p2-p1;
问:value的值?
答案:2
定义union,并说明如何使用。如何在union中进行位域的定义?
枚举类型:
enum type1 {
A,
B
};
enum type2 {
C =1,
D,
E,
F
}
问:A,B,D,E,F 的值分别是多少?
答案:0,1,2,3,4
宏定义函数与普通函数调用的区别?
宏定义中若有多行,如何连接
答案:用反斜杠’\’
#define fn_max(x,y) \
do { \
..... \
..... \
}while(0)
int main()
{
fn_max(x,y);
}
问:为什么要用do……while(0)把宏定义的多条语句括起来?
答案:便于优化
struct struct_A{
int a;
char b;
int c;
short d;
}
struct struct_B{
int a;
char b;
short c;
int d;
}
struct_A a;
struct _B b;
问:sizeof(struct_A a) = ?
sizeof(struct_A b) = ?
答案:sizeof(a) 为16,sizeof(struct_A b)为12
9. #include
main()
{
char **p;
char *m[] = {“Welcome \n”,
“to \n”,
“join \n”,
“us! \n”
};
p = m;
printf(“%s\n”,*p++);
printf(“%c\n”,**p);
}
问:写出程序的执行结果
答案:“Welcome”和“t”
10. static局部变量和static全局变量的区别
答案:主要是作用域的不同,static局部变量只在函数内部或者程序块内有效,而static全局变量在整个C文件模块中都有效,注意它在其它C文件中无效。
11. 指向常量的指针和常指针的区别
答案:指向常量的指针所指向的内容不能被修改但能够指向其它的量,而常指针是指向的内容可以被修改但指针不能再指向其它地方。
12. if (a=b)
printf(“a==b”)
else
printf(“a!=b”);
输出结果为:
A.a==b B.a!=b C.不一定 D.不能运行
答案:不一定,这要根据b的内容来决定。通常再编程时不要使用此类的赋值语句。
13.在内联函数中使用static变量,比如
inline test()
{ static couter = 0;
counter++;
}
会有什么问题?
答案:会造成多次定义该变量,因此再内联函数中禁止定义静态变量
14. F是一个结构类型,有如下定义:
F f1,f2;
问:f1=f2;语句是否成立?
答案:该语句成立,不过有的编译器不支持。实际上编译器也是用内存拷贝函数来实现的。
15.全局变量、局部变量、模块变量在内存空间中如何存放?(数据区or栈空间?)
答案:全局变量在全局空间分配,局部变量在栈空间分配,模块变量在全局空间分配。
16.struct A{
......
......
union {
int x;
.....
};
}
struct A a;
问:a.x这样的表示法是否成立?
答案:成立
如果结构定义改为如下定义
.struct A{
......
int x;
union {
int x;
.....
};
}
那a.x表示法是否成立?
答案:不成立,编译时会报x变量重定义
17. #define REDEF(name,arg1,arg...) \
_##name (arg1,##arg)
问:以下两个语句宏展开的结果
REDEF(test_fn1,int a,int b);
REDEF(test_fn2,int a);
答案:
_test_fn1(int a ,int b)
_test_fn2(int a);
注意:在VC中不支持,gcc才支持该参数宏函数。
18. fnxxxx_max(char str[])
{
putchar str[0];
str++; //(1)
printf(“%s”,str);
}
main()
{
char str[20]={“ABCDEFG”};
fnxxxx_max(str);
str++; //(2)
printf(“%s”,str);
}
问:语句(1)和语句(2)是否成立?
答案:语句(1)成立,语句(2)不成立
19.#define SRR 0x001;
#define SRT 0x002;
#define SRI 0x0900;
EVENT = SRR|SRT|SRI
问:上面的语句有什么问题?EVENT的值会是多少?
答案:宏展开后变为:
EVENT = 0x001; 0x002;0x0900;
因此EVENT的值为0x001,所以在编程时一定要小心,一定不要在常量宏定义的后面加上分号。
http://www.cnrencai.com/【c语言面试题及答案】相关文章:
c语言基础面试题03-26
C语言笔试题目及答案03-26
c面试题目03-26
c语言心得04-24
面试题及答案02-06
计算机二级c语言考试习题及答案07-29
c语言编程心得06-19
hr面试题及答案12-30
华为c语言笔试题07-17
C语言实习目的09-26