天天看点

C语言面试题库1-5

1.下面是C语言中两种if语句判断方式。请问哪种写法更好?为什么?

 int  n;

 if (n == 10) // 第一种判断方式

 if (10 == n) // 第二种判断方式

第二种,如果少了个=号,编译时就会报错,减少了出错的可能行,可以检测出是否少了=

2.写出运行结果:

{// test2

    union V {

          structX {

                     unsigned chars1:2;

                     unsignedchar s2:3;

                     unsignedchar s3:3;

              } x;

              unsignedchar c;

    } v;

    v.c = 100;

    printf("%d", v.x.s3);

}

Unsigned char类型100的二进制表示为:01100100 v.x.s3为后三位,及100,因此答案为3.

3.用C++写个程序,如何判断一个操作系统是16位还是32位的?不能用sizeof()函数

A1:

16位的系统下,

int i = 65536;

cout << i; // 输出0;

int i = 65535;

cout << i; // 输出-1;

32位的系统下,

int i = 65536;

cout << i; // 输出65536;

int i = 65535;

cout << i; // 输出65535;

A2:

int a = ~0;

if( a==65535 )

{

    cout<<"16 bit"<<endl;

}

else

{

    cout<<"32 bit"<<endl;

}

4.C和C++有什么不同?

       从机制上:c是面向过程的(但c也可以编写面向对象的程序);c++是面向对象的,提供了类。但是,

c++编写面向对象的程序比c容易

       从适用的方向:c适合要求代码体积小的,效率高的场合,如嵌入式;c++适合更上层的,复杂的;  llinux核心大部分是c写的,因为它是系统软件,效率要求极高。

       从名称上也可以看出,c++比c多了+,说明c++是c的超集;那为什么不叫c+而叫c++呢,是因为c++比

c来说扩充的东西太多了,所以就在c后面放上两个+;于是就成了c++

       C语言是结构化编程语言,C++是面向对象编程语言。

C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。

5.在不用第三方参数的情况下,交换两个参数的值

方法一:

#include<stdio.h>

void main()

{

        int i=60;

        int j=50;

        i=i+j;

        j=i-j;

        i=i-j;

        printf("i=%d\n",i);

        printf("j=%d\n",j);

}

方法二:

i^=j;

j^=i;

i^=j;

方法三:

// 用加减实现,而且不会溢出

a = a+b-(b=a)

6.进程间通信的方式有?

进程间通信的方式有 共享内存, 管道 ,Socket ,消息队列 ,等

7.下面的函数实现在一个固定的数上加上一个数,有什么错误,改正 

int add_n(int n)

{

  static int i=100;

  i+=n;

  return i;

}

答:因为static使得i的值会保留上次的值。去掉static就可了

8.下边代码输出结果

union a {

   int a_int1;

   double a_double;

   int a_int2;

};//8

typedef struct

{

   a a1;

   char y;

} b;//12

class c

{

   double c_double;

   b b1;

   a a2;

};//28

输出cout<<sizeof(c)<<endl;的结果?