Re: [問題] 型式參數為void *的問題

看板C_and_CPP作者 (ppttcc)時間15年前 (2010/10/28 14:46), 編輯推噓0(005)
留言5則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《ppttcc (ppttcc)》之銘言: : 問題: : 我想傳一個 tm 結構至自訂的函數中,但形式參數寫成void *, : 函數定義如下,但產生問題 : void* timefun(void * st) : { : cout<<st->tm_year;//此行有問題, : //編譯器訊息為 void* is not a pointer-to-object type : } : 我想這問題是因為沒有人告訴編譯器st將會是個tm結構的指標, : 自然也不可能取用結構的成員. : 但是否仍有解?(除了將void 改為tm) : 且如此一來將參數寫成void *的那些函數意義又是什麼? 之前的推文有人使用offset的方式,寫成 cout << *(int *)((size_t)d + offset) 但我的輸出一直是指標所指記憶體位址的整數型態, ex.指標本身位址所在為0x23fe14,所指記憶體位址在0x325e0] 但輸出卻是206304,也就是位址0x325e0的整數型 後來改成cout << **(size_t **)((size_t)d + offset) 才找出指標所指記憶體所存的值. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.1.44

10/28 15:08, , 1F
原po的運氣不錯
10/28 15:08, 1F

10/28 15:17, , 2F
是說此法還是有risk?
10/28 15:17, 2F

10/28 15:34, , 3F
因為tm_year當成指標的話,還好沒對到空指標
10/28 15:34, 3F

10/28 15:43, , 4F
用ollydbg看0x30000之後好像存了一些資訊
10/28 15:43, 4F

10/28 23:05, , 5F
上面那個寫法搭配 Hex 去印其實也就可以了吧??
10/28 23:05, 5F
文章代碼(AID): #1CoHmujj (C_and_CPP)
文章代碼(AID): #1CoHmujj (C_and_CPP)