设为首页 加入收藏

TOP

网上流传的C++面试题(二)
2014-11-24 01:43:19 来源: 作者: 【 】 浏览:46
Tags:网上 流传 试题
10];
for(i=0; i<10;i++)
{
str1[i] ='a';
}
strcpy(string, str1);
}
数组越界(以’/0’为拷贝界限)
--------------------------------------------------------------------------
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 {
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
出自林锐博士的《高质量C++编程》,面试时见过N多次了,比较经典的题目。
--------------------------------------------------------------------------
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);
}
目前这个问题网上流行的答案有三个:1, 3, 4,在本人的机器上结果为3(VC7)
struct X的位占用顺序为:低2位,中3位,高3位,也就是说,union V的实际内容为0110 0100
s3占用高3位,取值011,十进制为3。
再补充一下,占用不满8位时,会截取低N位,如截取s2的低3位放入X的中间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"< }
else
{
cout<<"16 bit"< }
也是比较经典的题目了!面试出现率较高!
--------------------------------------------------------------------------
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
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)
方法三好强的说 =_=||,一上来就b=a了,b不就丢掉了吗?反正我是没找回来,呵呵
————————————————————————–
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, 表示二进制位的个数, 即表示有多少位。
变量名是选择项, 可以不命名, 这样规定是为了排列需要。
例如: 下面定义了一个位结构。
struct{
unsigned incon: 8; /*incon占用低字节的0~7共8位*/
unsi

首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java基础知识面试题异常相关的选.. 下一篇华为逻辑推理题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: