C 的面试题哦~(2)

2008-02-23 05:32:18来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


}

数组越界

--------------------------------------------------------------------------
10.下面代码有什么问题?
Void test2()
{
char string[10], str1[10];
for(i=0; i<10;i )
{
str1 ='a';
}
strcpy(string, str1);
}

数组越界

--------------------------------------------------------------------------
11.下面代码有什么问题?
Void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}

==数组越界
==strcpy拷贝的结束标志是查找字符串中的\0 因此假如字符串中没有碰到\0的话 会一直复制,直到碰到\0,上面的123都因此产生越界的情况

建议使用 strncpy 和 memcpy

--------------------------------------------------------------------------
12.下面代码有什么问题?

#define MAX_SRM 256

DSN get_SRM_no()
{
static int SRM_no; //是不是这里没赋初值?
int I;
for(I=0;I<MAX_SRM;I ,SRM_no )
{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}

系统会初始化static int变量为0,但该值会一直保存,所谓的不可重入...

--------------------------------------------------------------------------
13.写出运行结果:
{// test1
char str[] = "world"; cout << sizeof(str) << ": ";
char *p = str; cout << sizeof(p) << ": ";
char i = 10; cout << sizeof(i) << ": ";
void *pp = malloc(10); cout << sizeof(p) << endl;
}

6:4:1:4

--------------------------------------------------------------------------
14.写出运行结果:
{// test2
union V {
struct X {
unsigned char s1:2;
unsigned char s2:3;
unsigned char s3:3;
} x;

unsigned char c;
} v;

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

}

3

--------------------------------------------------------------------------
15.用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>65536 )
{
cout<<"32 bit"<<endl;
}
else
{
cout<<"16 bit"<<endl;
}


--------------------------------------------------------------------------
16.C和C 有什么不同?

从机制上:c是面向过程的(但c也能够编写面向对象的程式);c 是面向对象的,提供了类。但是,
c 编写面向对象的程式比c容易

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

从名称上也能够看出,c 比c多了 ,说明c 是c的超集;那为什么不叫c 而叫c 呢,是因为c 比
c来说扩充的东西太多了,所以就在c后面放上两个 ;于是就成了c

C语言是结构化编程语言,C 是面向对象编程语言。
C 侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。

--------------------------------------------------------------------------
17.在不用第三方参数的情况下,交换两个参数的值
#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)

--------------------------------------------------------------------------
18.有关位域的面试题(为什么输出的是个奇怪的字符)

a.t = 'b';效果相当于 a.t= 'b' & 0xf;

'b' --> 01100010
'b' & 0xf -->>00000010
所以输出Ascii码为2的特别字符


char t:4;就是4bit的字符变量,同样
unsigned short i:8;就是8bit的无符号短整形变量

--------------------------------------------------------------------------
19.int i=10, j=10, k=3; k*=i j; k最后的值是?

60

--------------------------------------------------------------------------
20.进程间通信的方式有?

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

--------------------------------------------------------------------------
21.
struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
}
sizeof(A)=?(不考虑边界对齐)

7

struct CELL // Declare CELL bit field
{
unsigned character : 8; // 00000000 ????????
unsigned foreground : 3; // 00000??? 00000000
unsigned intensity : 1; // 0000?000 00000000
unsigned background : 3; // 0???0000 00000000
unsigned blink : 1; // ?0000000 00000000
} screen[25][80]; // Array of bit fields
二、位结构
位结构是一种特别的结构, 在需按位访问一个字节或字的多个位时, 位结构
比按位运算符更加方便。
位结构定义的一般形式为:
struct位结构名{
数据类型 变量名: 整型常数;
数据类型 变量名: 整型常数;
} 位结构变量;
其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整
数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C : BIG5到GB

下一篇: 经典C语言程式设计100例41-50