cc
C++博客
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
::
38 隨筆 :: 14 文章 :: 21 評論 :: 0 Trackbacks
<
2025年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
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
1
2
3
4
5
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(3)
給我留言
查看公開留言
查看私人留言
隨筆檔案
(38)
2013年3月 (1)
2011年5月 (1)
2011年2月 (3)
2010年3月 (2)
2010年2月 (1)
2010年1月 (4)
2009年12月 (2)
2009年11月 (5)
2009年10月 (4)
2009年7月 (1)
2009年6月 (2)
2009年5月 (2)
2009年4月 (1)
2008年10月 (1)
2008年9月 (1)
2008年8月 (1)
2008年7月 (3)
2007年12月 (2)
2007年7月 (1)
文章分類
(10)
編程相關(9)
(rss)
經典網評(1)
(rss)
文章檔案
(14)
2008年7月 (1)
2006年12月 (13)
相冊
cc
搜索
最新評論
1.?re: 使用 .NET Remoting 實現并行計算 [轉]
評論內容較長,點擊標題查看
--EssaysService rewiew
2.?re: 使用 .NET Remoting 實現并行計算 [轉]
評論內容較長,點擊標題查看
--custom essay writing services reviews
3.?re: 使用 .NET Remoting 實現并行計算 [轉]
評論內容較長,點擊標題查看
--this link
4.?re: C#中new和override區別
THX!
--programmer
5.?re: 數據庫水平分庫框架設計
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
--aaaaaaaaaaaaaaaaaaaa
閱讀排行榜
1.?WINDOWS 邏輯坐標 設備坐標 屏幕坐標 客戶區坐標(2509)
2.?空間中直線和三角面片求交(2442)
3.?C# winform 實現(不規則)窗體或者控件的拖動(2416)
4.?保存Graphics對象到Bitmap對象 [轉](2205)
5.?如何在Dll中導出STL類(1940)
評論排行榜
1.?數據庫水平分庫框架設計(2)
2.?C++中extern “C”含義深層探索(1)
3.? C#中new和override區別 (1)
4.?CString和string的互相轉換 (1)
5.?如何在Dll中導出STL類(1)
一道騰訊的面試題
class?a
{
word?m_a1;
word?m_a2;
a(){m_a1=1;m_a2=2;}
void?fun(){printf("%d,%d",m_a1,m_a2);}
}
class?b
{
dword?m_a3;
b(){m_a3=3;}
void?fun(){printf("%d",m_a3);}
}
main()
{
a?a;
b?*pb;
pb=b*(&a);
pb->fun();
}
輸出是什么?
posted on 2006-12-17 15:30
醒目西西
閱讀(595)
評論(2)
編輯
收藏
引用
所屬分類:
編程相關
評論
#
re: 一道騰訊的面試題
2006-12-17 15:30
醒目西西
結果是1
pb=(b*)(&A); 將A的地址傳給了pb,并強制轉化為b類的地址
pb->fun(); 調用b 的fun()方法,不過此時ma_3,是a類的ma_1,所以輸出1
你可以改一下程序運行就知道了
#include <stdio.h>
class a
{
char m_a1;
char m_a2;
public:
a(){m_a1=1;m_a2=2;}
void fun(){printf("%d,%d",m_a1,m_a2);}
};
class b
{
char m_a3;
public:
b(){m_a3=3;}
void fun(){printf("%dggggg",m_a3);}//可以看出是調用了該方法
};
void main()
{
a A;
b *pb;
pb=(b*)(&A);
pb->fun();
}
回復
更多評論
#
re: 一道騰訊的面試題
2006-12-17 15:30
醒目西西
在win32和32位編譯器的環境下,結構體(struct和class)中的數據域是按聲明的先后順序,“向上生長”的。就是說若結構體A中按先后聲明了兩個域a、b,則存放b的地址大與存放a的地址!注意,有些編譯器為了提高在32位系統中對內存的訪問速度,所以使用了內存對齊技術--結構體中的各個域是按4字節對齊的!
我們假設樓主提供的題目如下:
#include <stdlib.h>
#include <stdio.h>
class a {
short m_a1;
short m_a2;
public:
a() {
m_a1 = 1;
m_a2 = 2;
}
void fun() {
printf("%d,%d", m_a1, m_a2);
}
};
class b{
int m_a3;
b() {
m_a3 = 3;
}
public:
void fun() {
printf("%d", m_a3);
}
};
int main() {
printf("sizeof a, b = %d %d\n", sizeof(a), sizeof(b));
a a;
b *pb;
pb = (b*)(&a);
pb -> fun();
}
就是說,a的大小是8字節,b的大小是4字節!
而b::fun()就是按int的格式輸出結構體中的前四個字節!所以輸出1!
但是,若沒有使用內存對齊技術!上面的問題就麻煩了!
a和b 的大小都是4字節!
a a+2
1 2 -> (2 << 16) | 1
所以應該輸出:
131073
回復
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
C++基本類型對象化的一個方案
[轉]delegate 與 多線程
去騰訊時遇到的一個面試題
騰訊最新面試題,算法高手請進
一道騰訊的面試題
c#多線程教學(4):線程池和異步編程
c#.net多線程編程教學(2):Thread類
使用 .NET Remoting 實現并行計算 [轉]
[C#學習]在多線程中如何調用Winform
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 醒目西西
狠狠色婷婷久久综合频道日韩
|
欧美午夜精品久久久久免费视
|
久久99精品久久久久久动态图
|
久久无码中文字幕东京热
|
品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美
|
久久精品亚洲AV久久久无码
|
久久久久久久综合日本
|
久久精品国产黑森林
|
久久精品?ⅴ无码中文字幕
|
久久se精品一区精品二区国产
|
国内精品久久久久国产盗摄
|
国产精品美女久久久免费
|
久久精品国产亚洲5555
|
久久久精品日本一区二区三区
|
欧美激情精品久久久久久
|
久久福利资源国产精品999
|
亚洲欧美成人综合久久久
|
国色天香久久久久久久小说
|
亚洲精品蜜桃久久久久久
|
久久久久99精品成人片直播
|
久久AV高清无码
|
国产成人久久精品二区三区
|
一本色道久久88综合日韩精品
|
一97日本道伊人久久综合影院
|
久久综合给合综合久久
|
伊人久久大香线蕉av一区
|
国产美女久久精品香蕉69
|
国产精品一区二区久久精品无码
|
午夜精品久久久久久久久
|
久久精品国产99国产精偷
|
色播久久人人爽人人爽人人片aV
|
久久精品国产久精国产一老狼
|
国产精品一区二区久久国产
|
久久99精品久久久久久水蜜桃
|
国内精品久久久久影院老司
|
国产精品久久久久aaaa
|
人妻中文久久久久
|
久久99国产精品久久
|
精品久久久久成人码免费动漫
|
久久久久夜夜夜精品国产
|
综合人妻久久一区二区精品
|