看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): 以下的程式我執行過,都是回傳四 char *a; int *b; long *c; void *d; printf("a = %d",sizeof(a)); printf("b = %d",sizeof(b)); printf("c = %d",sizeof(c)); printf("d = %d",sizeof(d)); 請問各位大大,對指標變數進行sizeof的話,都是四嗎?? 那為何都是四?? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.221.197
bibo9901:指標裝的是記憶體位置, 大小當然都一樣 10/06 21:06
singlovesong:是因為那樣子是問指標的size吧?所以是4bytes 10/06 21:06
singlovesong:不過有些機器好像是8bytes 10/06 21:07
SocketAM2:64位元的作業系統是8 10/06 21:08
SocketAM2:不過有些embeded上會有怪事,例如16bit的OS配20bit ptr 10/06 21:11
stupid0319:最近在指標迷航的人真多 10/06 21:12
winout0112:不過怪的是我機器是64bit的server,不知跟gcc版本有無 10/06 21:15
winout0112:關連 10/06 21:15
stupid0319:編成32bit程式去跑的嗎? 10/06 21:41
diabloevagto:不要把ptr本身,跟他指向的東西搞混 10/06 22:25
littleshan:不同型別的指標,大小不一定相同 10/06 22:43
diabloevagto:同樣編譯環境、不同型別的指標,大小會不同? 10/06 22:51
SocketAM2:我是小嫩嫩,我以為樓上說的情況大小會是固定的,不是 10/06 23:14
SocketAM2:嗎? 有請高手解說 10/06 23:15
littleshan:標準沒規定不同型別指標大小一定相同 10/07 03:02
littleshan:最簡單的例子:member function pointer 10/07 03:02
littleshan:很多場合是一樣大沒錯,但只要你做了一樣大的假設 10/07 03:06
littleshan:就要有這段code並不portable的心理準備 10/07 03:06
tinlans:大部分/一般場合可以預期一般指標和 ptrdiff_t 或 long 10/07 09:09
tinlans:一樣寬。自己判斷看看怎麼玩吧 10/07 09:09
cobrasgo:提醒一下sizeof是operator喔,有注意的人應該不多 10/07 14:48
diabloevagto:感謝l大提醒,原來標準內沒有寫...又是一個坑 10/08 23:25
s3748679:那個 不懂sizeof是operator會影響什麼.. 有坑!? 10/09 00:42