我要投稿 投诉建议

c语言面试题及答案

时间:2022-11-10 19:34:22 面试试题 我要投稿
  • 相关推荐

c语言面试题及答案

  函数指针:

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