作者sanforever (corn)
看板C_and_CPP
标题[问题] 转型and function pointer
时间Wed Oct 14 23:45:04 2009
http://codepad.org/hlovKWlF
这是我在网路上,抓来研究改的code
1.第7行不写似乎不行
中间牵扯到许多转型,可是看不出个所以然!
2.第44行
呼叫时
items[0]->print(items[0]);
^^^
为什麽传的参数不是写 &items[0]
函数宣告不是这样吗?
void printBook(struct SaleItem *book)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.235.133
1F:→ sanforever:第七行,原code是写int size 10/14 23:45
2F:推 QQ29:是第七还是第八行? 10/14 23:56
3F:→ QQ29:你第二个问题 item型态是 *[]喔不是只有* 10/14 23:57
4F:推 QQ29:1.不就单纯宣告一个function pointer 跟转型无关 10/15 00:01
5F:→ sanforever:第二个问题,我没注意看到[],抱歉 10/15 00:29
6F:→ sanforever:第一个问题问的是第一行,int a 10/15 00:30
7F:→ sanforever:咦?不对,44行只有*阿 10/15 00:32
8F:推 QQ29:看宣告 struct SaleItem *items[1]; 10/15 00:48
9F:→ QQ29:你传item[0] type就是 *了 item本身是*[1] 10/15 00:49
11F:→ sanforever:上面贴错 10/15 00:59
12F:→ sanforever:那第一个问题是什麽原因? 10/15 01:01
13F:推 QQ29:第一个哪有错? 10/15 01:02
14F:→ QQ29:只是一般function pointer宣告阿 10/15 01:02
15F:推 holymars:不加int a;的话 44行是不会呼叫到printBook的 10/15 01:03
16F:→ holymars:这真是恶搞的写法..是要用C模拟出virtual function吗= = 10/15 01:03
17F:→ holymars:int a;宣告的目的是让SaleItem和Book的function pointer 10/15 01:04
18F:→ holymars:「对齐」这样转型後的function pointer offset才会「对齐 10/15 01:04
19F:推 QQ29:喔原来是在问这个阿??? 10/15 01:06
20F:推 QQ29:问个怪问题 *(items[0]->print)(items[0]);这样为啥不给过? 10/15 01:24
21F:→ sanforever:原来是要让他在记忆体位置对齐? 10/15 01:27
22F:→ sanforever:难怪我把他改成double也可行 10/15 01:27
23F:推 QQ29:改double不能吧?? 哪里改double 10/15 01:29
24F:→ QQ29:你说两个都改嘛XD 10/15 01:29
25F:→ sanforever:是的 10/15 01:31
26F:推 QQ29:不过我很好奇我那行为啥不过....很诡异 10/15 01:32
27F:→ sanforever:应该是要写这样吧 (*items[0]).print(items[0]); 10/15 01:33
28F:→ sanforever:function pointer後面一定要直接接括号吧 10/15 01:34
29F:推 QQ29:喔我不是这意思 function pointer呼叫可以不加*也可以加 10/15 01:35
30F:→ QQ29:我刻意要加星星 呼叫~ 可是一般写法可以 这不行 不了解@@ 10/15 01:36
31F:推 snowlike:(*(*items[0]).print)(items[0]); 一般写法也是这样吧? 10/15 01:47
32F:→ snowlike: ↑多了一个*.. 10/15 01:49
33F:推 QQ29:喔我一开始打错 我想打*(items[0]->print)(items[0]); 10/15 01:49
34F:→ QQ29:不过看到您推文 我知道错了改成(*(items[0]->print)(items[0] 10/15 01:50
35F:→ QQ29:疑...一样 晕了 反正我少了一层() ...谢谢你 10/15 01:50
36F:→ snowlike:没多不好意思= = 该睡了orz 10/15 01:50