C++开发工程师面试题库

VIP免费
2024-12-10 0 0 79.73KB 114 页 5.9玖币
侵权投诉
1. 指出以下变量数据存储位置
全局变量 int(*g_pFun)(int);g_pFun=myFunction;g_pFun 存储的位置(A ) 为
全局的函数指针
指向空间的位置( B) 所有函数代码位于 TEXT
函数内部变量 static int nCount; ( A) 静态变量总是在 DATA
段或 BSS 段中
函数内部变量 char p[]=”AAA”; p 指向空间的位置( C) 局域变量的静态
数组,空间在 Stack 中
函数内部变量 char *p=”AAA”; p 指向空间的位置( E) ,”AAA”为一字符
常量空间,不同编译器有不同处理方法,大部分保存在 TEXT(代码段中),也有编
译的 rodata 段中
函数内部变量 char *p=new char; p 的位置(C ) 指向空间的位置(D ) 所有
malloc 空间来自于 heap(堆)
A. 数据段
B. 代码段
C. 堆栈
D. 堆
E. 不一定, 视情况而定
以上知识参见 C 语言变量的作用域相关课件
2. 以下程序的输出结果为 ( )
#include <iostream>
main( )
{
using namespace std;
int num[5]={1,2,3,4,5};
cout <<*((int *)(&num+1)-1) <<endl;
}
A. 1 B.2 C. 3 D.
4 E. 5  F. 0 G. 未初始化内存,无
法确定
在 C 语言中,一维数组名表示数组的首地址,而且是一个指针.如上例 num,
对&num,表示指针的指针.意味着这里强制转换为二维数组指针.
这样 &num+1 等同于 num[5][1],为代码空间. (&num+1)-1 表示 num[4][0].即
num[4].所以这里答案是 E.
扩展题目:
*((int *)(num+1)-1) 的值是多少?
Num 是首指针,num+1 是第二个元素指针,-1 后又变成首指针.所以这里是答案是
num[0]即,A.1
3. 以下哪些是程序间可靠的通讯方式( C ),哪些可以用于跨主机通讯
( C,D ,F).Windows 命名管道跨机器也可跨机器.
A. 信号 B. 管道  C.
TCP D. UDP E. PIPE
F,.串口 I/O
4. class a
{
public:
virtual void funa( );
virtual void funb( );
void fun( );
static void fund( );
static int si;
private:
int i;
char c;
};
问: 在 32 位编译器默认情况下,sizeof(a)等于( )字节?
A. 28 B. 25 C.24   D.
20  E. 16  F.12 
G. 8
答案在 VC++下是 12. 这里需要考虑三个问题,一是虚函数表 vtable 的入口表地
址,二是字节对齐.三 ,静态成员是所有对象共享,不计入 sizeof 空间.
在大部分 C++的实现中,带有虚函数的类的前 4 个 BYTE 是虚函数 vtable 表的这
个类入口地址.所以 sizeof 必须要加入这个 4 个 byte 的长度,除此外,类的
sizoef()为所有数据成员总的 sizeof 之和,这里是 int i,和 char c.其中 char
c 被字节对齐为 4.这样总长度为
Sizeof(a) = sizeof(vtable)+size(int)+sizeof(char + pad) = 12;
5. 32 Windows 系统或 Linux系统下
struct
{
char a;
char b;
char c;
}A;
struct
{
short a;
short b;
short c;
}B;
struct
{
short a;
long b;
char c;
}C;
printf(“%d,%d,%d\n”,sizeof(A),sizeof(B),sizeof(C)); 的执行结果为: (
)
A. 3,6,7 B. 3,6,8 C.
4,8,12 D. 3,6,12  E.
4,6,7 F. 4,8,9
C 语法的字节对齐规则两种情况要字节对齐, 在 VC++,gcc 测试都是如此
1) 对同一个数据类型(short,int,long)发生了跨段分,(在 32CPU 里,
即一个数据类个段中)才会发生字节对齐.
2) 数据类的首部和部必须有其一是4 对齐.而且违反上一规则.
l Sizeof(A),sizeof(B)虽然总字节数不被4除.但刚好所有数据平均
在以 4 为位的个段中.所以无需字节对齐,所以结果是 3 6
l struct {char a;char b;char c;char d;char e;}F; 的 sizoef(F)是等于
5.
l 用以下实例清楚
struct {
char a[20];
short b;
}A;
struct {
char a[21];
short b;
}B;
Sizeof(A)=22,sizoef(B)=24.为前者没发生跨段分.后,如果不字节对
齐.a[21]后一个段的首地址,b 无法作到与首部与尾4 对齐,只能
a[21]b 之间加入一个 byte,使用b的4 对齐.
l C 比较好.要多个成 12
6. 据程序,以下选择个是对的? ( )
class A
{
int m_nA;
};
class B
{
int m_nB;
};
class C:public A,public B
{
int m_nC;
};
void f (void)
{
C* pC=new C;
B* pB=dynamic_cast<B*>(pC);
A* pA=dynamic_cast<A*>(pC);
}
A. pC= =pB,(int)pC=
=(int)B
 B. pC= =pB,(int)pC!=(int)pB
C. pC!=pB,(int)pC=
=(int)pB
 D. pC!=pB,(int)pC!=(int)pB
这里主要考多态..程序变为如下比较易懂
#include <stdio.h>
class A
{
public:
int m_nA;
};
class B
{
摘要:

1.   指出以下变量数据存储位置全局变量int(*g_pFun)(int);g_pFun=myFunction;g_pFun存储的位置(A)为全局的函数指针指向空间的位置(B)所有函数代码位于TEXT段函数内部变量staticintnCount;      (A)静态变量总是在DATA段或BSS段中函数内部变量charp[]=”AAA”; p指向空间的位置(C)局域变量的静态数组,空间在Stack中函数内部变量char*p=”AAA”; p指向空间的位置(E),”AAA”为一字符常量空间,不同编译器有不同处理方法,大部分保存在TEXT(代码段中),也有编译的rodata段中函数内部变量cha...

展开>> 收起<<
C++开发工程师面试题库.docx

共114页,预览6页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:计算机 价格:5.9玖币 属性:114 页 大小:79.73KB 格式:DOCX 时间:2024-12-10

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 114
客服
关注