高分求4道C++笔试题讲解

sicofield 2014-05-20 09:09:55
1.
int a;
int *b = &a;
void myfun(int*& c)
{
a=2;
cout << *c <<endl;
cout << c <<endl;
cout << &a <<endl;
}
int main()
{
myfun(b);
return 0;
}


该程序输出 2 问*&是什么意思?为什么最终就是输出的a的值?

2.
void main()
{
int str[][4]={{1,2,3,4},{5,6,7,8}};
int* pc1 = (int*)(&str+1);
int* pc2 = (int*)(&str[0]+1);
int* pc3 = (int*)(str+1);

int c1 = *(pc1-1);
int c2 = *(pc2-1);
int c3 = *(pc3-1);

cout << c1 <<endl << c2 << endl << c3 <<endl;
return;
}


请解释输出和原理。

3.
class Exception
{
public:
string& getException(){return _str;}
Exception():_str("Normal constructor string"){cout << _str <<endl;}
Exception(const Exception& e):_str("Copy constructor string"){cout << _str <<endl;}
Exception(string str):_str(str){cout << _str <<endl;}
private:
string _str;
};
int main()
{
try
{
Exception e(string("Init exception string"));
throw e;
}
catch (Exception &e)
{
string ecptstr = e.getException();
}

return 0;
}


这个程序的输出是:
Init exception string
Copy constructor string
在哪里调用了Copy constructor?

4.
which of the following statements about STL is right?
A. using containers, size()=0 is always equal to empty().
B. using vector<int> vec, passing &vec[0] to standard C function int sum(int array[]) as sum(&vec[0]) is not right
C. None of the above

请给出解释。


...全文
247 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiafei8888 2014-05-20
  • 打赏
  • 举报
回复
1:int*& c =b其实是 int* &c =b, 编辑器 把int* 看成一起,把&c看成一起,即建立指针b的引用,c就是他的别名嘛, 这个cout<<*c,就是cout<<*b,就是2 了。后面两个输出的就是a的地址了。 2:str为行指针 ,&str二位数组的地址, &str[0] 嘛,这样看:str【0】就是*(str+0),解引用就是指向对象本身,str为行指针,即指向一维数组的指针,解引用就是一维数组,str【0】可以看成一维数组的数组名,&str【0】就是他的地址。 &str+1,二维数组的地址加1,对应于8的地址后面的一个地址,再减1,c1 =8; &str[0]+1,第一行数组的地址加1,对应于5这个地址,再减1,c2 =4; str+1 ,和上面一样,c3 =4; 3: string ecptstr = e.getException(); //初始化对象。 4:A 正确,两者含义是一样的 size_type size() const { // return length of sequence return (_Mysize); } bool empty() const { // test if sequence is empty return (size() == 0); } B 不对,array为指针嘛,地址传给他没问题。
mujiok2003 2014-05-20
  • 打赏
  • 举报
回复
引用 1 楼 sd530842780 的回复:
1.使用指针传递地址,*&p是对指针的引用 2.二维数组 int a[b][c] ;&a==a ,但是&a+1 != a+1,&a+1==b*c*sizeof(int) ;a+1==c*sizeof(int) 3.拷贝构造 4.A?
引用 2 楼 hanyue03 的回复:
3.throw e; 这里应该用了copy构造吧,其他的楼上都说了
综合这两位。
赵4老师 2014-05-20
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
lanlvy 2014-05-20
  • 打赏
  • 举报
回复
引用 1 楼 sd530842780 的回复:
1.使用指针传递地址,*&p是对指针的引用 2.二维数组 int a[b][c] ;&a==a ,但是&a+1 != a+1,&a+1==b*c*sizeof(int) ;a+1==c*sizeof(int) 3.拷贝构造 4.A?
容器的大小为零不等于空吧?
zilaishuichina 2014-05-20
  • 打赏
  • 举报
回复
1: int*& c 你可以 typedef int* PtrInt 于是 int*& c 变成了 PtrInt& c 现在你能看出来了么 c是一个引用 一个PtrInt类型的引用, 即指针的引用 2: (&str+1):str是int[2][4]类型的数组,&str+1是把int[2][4]当成一个整体+1,相当于偏移了整个int[2][4],即到了8之后的地址上 (&str[0]+1):str[0]是一个int[4]的数组,&str[0]+1是把int[4]当成一个整体+1,从str[0]开始偏移int[4],即到了5的地址上 (str+1):按规定str是二维数组名,也是二维数组0行的首地址,str+1相当于str[1] 3: C++规范要求被做为异常抛出的对象必须被复制。 4: STL不熟,不怎么使用
hanyue03 2014-05-20
  • 打赏
  • 举报
回复
3.throw e; 这里应该用了copy构造吧,其他的楼上都说了
不要做咸鱼 2014-05-20
  • 打赏
  • 举报
回复
1.使用指针传递地址,*&p是对指针的引用 2.二维数组 int a[b][c] ;&a==a ,但是&a+1 != a+1,&a+1==b*c*sizeof(int) ;a+1==c*sizeof(int) 3.拷贝构造 4.A?
不要做咸鱼 2014-05-20
  • 打赏
  • 举报
回复
引用 8 楼 TheNewIpad 的回复:
都面试题都这么积极? 都想跳槽了?
求不打小报告
TheNewIpad 2014-05-20
  • 打赏
  • 举报
回复
都面试题都这么积极? 都想跳槽了?

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧