Welcome to Leon's Blog
日历
<
2008年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
统计
随笔 - 30
文章 - 0
评论 - 51
引用 - 0
导航
C++博客
首页
发新随笔
发新文章
联系
聚合
管理
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
c++学习(10)
(rss)
windows编程(2)
(rss)
编译学习(1)
(rss)
随笔档案
2009年9月 (3)
2009年4月 (1)
2009年3月 (2)
2008年12月 (3)
2008年10月 (4)
2008年9月 (3)
2008年8月 (2)
2008年7月 (2)
2008年6月 (2)
2008年5月 (8)
ACM
AClayton
bon
sicheng
SKYIV STUDIO
搜索
最新评论
1. re: 一个Java的B-Tree源代码
@eee
怎么用Java 写Btree啊
--刘彬
2. re: acm pku 1010 程序
似乎没有用到动态规划
--qingzheng
3. re: C语言文件读写
这是用通过调用c语言的库文件来实现。
以下是用C++的中的stream来实现的,但是在处理中文的时候,会出现一些乱码。
--ablajan
4. re: 一个Java的B-Tree源代码
e
--eee
5. re: 一个Java的B-Tree源代码
rrr
--eee
阅读排行榜
1. std:string学习(11546)
2. acm pku 1010 程序(1924)
3. 转载ACM学习建议(以此鼓励自己)(1670)
4. C语言文件读写(1578)
5. 1001题探讨(1549)
评论排行榜
1. 1003题探讨(8)
2. 求助程序(6)
3. 删除病毒求助(6)
4. 网上面试题疑问(4)
5. acm pku 1010 程序(4)
网上面试题疑问
快找工作了,从今天开始开始复习C++等知识了。现在遇到了几个奇怪的题目:
1、
class
CLS
{
public
:
int
m_i;
CLS(
int
i )
//
: m_i(i) {}
{
m_i
=
i;
}
CLS()
{
CLS(
0
);
}
}
;
int
main()
{
CLS obj;
cout
<<
obj.m_i
<<
endl;
}
问输出是多少?
调试之后,发现在
CLS()
{
CLS(0);
}
中的this指针不同,所以这里可能和c#或者Java不同,当调用CLS(0)的时候,它会重新分配一块空间,并且初始化新对象的m_i=0.
后来在网上搜了一下,找打了这篇文章:
http://blog.csdn.net/cnheying/archive/2007/05/16/1611698.aspx
和
http://www.cnblogs.com/chio/archive/2007/10/20/931043.html
。不知道大家对这道题有什么想法,欢迎讨论!
2、
float
a
=
1
;
cout
<<
(
int
)a
<<
endl;
cout
<<
(
int
&
)a
<<
endl;
//
cout << *(int*)&a << endl;
cout
<<
boolalpha
<<
((
int
)a
==
(
int
&
)a)
<<
endl;
float
b
=
0.0f
;
cout
<<
(
int
)b
<<
endl;
cout
<<
(
int
&
)b
<<
endl;
cout
<<
boolalpha
<<
((
int
)b
==
(
int
&
)b)
<<
endl;
cout
<<
endl;
本来不存在我注释的那一行,考虑(int&)a的时候,发现输出跟想想的不一样,后来发现和*(int*)&a的值是相同的。所以我猜测(int&)a可能首先取a的地址,然后转化成(int*),再去a地址里面的内容,这时是按照int读取的。
3、
int
x
=
1
;
int
*
p
=
&
x;
int
y
=
4
;
cout
<<
(
++
(
*
p)
<
y
?
(
*
p)
++
: y)
<<
endl;
cout
<<
x
<<
endl;
关于三元运算符和++的比较,++的优先级比三元运算符高。我是在VS2005下调试的,通过读汇编代码,发现((*p) ++< y ? (*p)++: y);首先对x+1,然后把值回写的内存中,用原来的之比较,比较晚之后,再从内存中读取出值,进行cout<<(*p)++<<endl;的操作。输出原值后再+1。结果x最终输出3。(这样如果死扣语言,我觉得自己会死人的)。
如果以上哪里分析的不对,欢迎大家拍砖!!
posted on 2008-10-06 16:00
Leon916
阅读(335)
评论(4)
编辑
收藏
引用
所属分类:
c++学习
评论:
#
re: 网上面试题疑问
canbingzt
Posted @ 2008-10-06 17:14
(int&)a
是不是引用的意思?
回复
更多评论
#
re: 网上面试题疑问
李现民
Posted @ 2008-10-07 16:29
关于i++的问题,c++的与c#, java的计算规则不一样,真搞不清楚为什么要考这样的东西
回复
更多评论
#
re: 网上面试题疑问[未登录]
Xw.Y
Posted @ 2008-10-07 16:55
1.构造函数的调用和实例初始化的次序问题
2.强类型转换……很奇怪的写法
3.变量取地址,指针取值,以及++的用法
也就第一题还能算题吧,其实都是简单概念,很无聊而且很不厚道的题目……没啥意思,
回复
更多评论
#
re: 网上面试题疑问
Leon916
Posted @ 2008-10-07 21:51
(int&)a我觉得不是引用。
我也实在搞不清楚,为什么公司希望用这些东西来衡量一个人C++语言的水平,但是也没有办法。
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
归并排序
STL源码阅读1
重新开始
C语言文件读写
一个Java的B-Tree源代码
std:string学习
std::Vector学习
笔试题2
sizeof 用法总结(转)
网上面试题疑问
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Copyright © Leon916
Powered by:
博客园
模板提供:
沪江博客