[問題] 陣列在傳進函式之後 sizeof 的值會不一樣

看板C_and_CPP作者 (是否執行BB2039.exe)時間12年前 (2013/05/29 00:07), 編輯推噓4(4014)
留言18則, 8人參與, 最新討論串1/1
程式碼22行而已 所以直接貼上來 1 #include <stdio.h> 2 3 size_t getSize( float *ptr ); 4 5 int main( void ) 6 { 7 float array[ 20 ]; 8 9 printf( "The number of bytes in the array is %d" 10 "\nThe number of bytes returned by getSize is %d\n", 11 sizeof( array ), getSize( array ) ); 12 13 return 0; 14 15 } 16 17 18 size_t getSize( float *ptr ) 19 { 20 return sizeof( ptr ); 21 22 } 執行結果: The number of bytes in the array is 80 The number of bytes returned by getSize is 4 問題(Question): 還是看不懂為什麼第一個答案是80 第二個答案是 4 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.65.238 ※ 編輯: iamchyun 來自: 114.42.65.238 (05/29 00:08)

05/29 00:09, , 1F
第二個答案是因為float大小本來就是4
05/29 00:09, 1F

05/29 00:10, , 2F
第一個答案因為有20個float所以乘起來就是80
05/29 00:10, 2F

05/29 00:15, , 3F
我覺得是getsize用的是pointer,pointer的size都是4。
05/29 00:15, 3F

05/29 00:17, , 4F
第二個答案請忽略,我看成sizeof...
05/29 00:17, 4F

05/29 00:17, , 5F
你是用64位元的os?
05/29 00:17, 5F

05/29 00:18, , 6F
更正:pointer的size大部份是4 XD
05/29 00:18, 6F

05/29 00:35, , 7F
應該不太能說大部份 我沒理解錯的話 32-bit=>4 64-bit=>8
05/29 00:35, 7F

05/29 00:35, , 8F
這是教科書的內容 我還沒RUN過 因為讀不懂程式
05/29 00:35, 8F

05/29 00:41, , 9F
你把書上在這段程式附近在講 sizeof 的那一整段/節/章給看過
05/29 00:41, 9F

05/29 00:41, , 10F
還有什麼不懂的再來問
05/29 00:41, 10F

05/29 00:41, , 11F
pointer不是2跟4喔xd
05/29 00:41, 11F

05/29 00:52, , 12F
嘛,會說大部份是因為codeforce和ideone都還是4 XD
05/29 00:52, 12F

05/29 01:25, , 13F
在vc只有找到int有x64,沒有找到float的x64 ( ̄ー ̄;)
05/29 01:25, 13F

05/29 02:47, , 14F
浮點數跟整數本來就是不同世界的,有的處理器連浮點數都沒
05/29 02:47, 14F

05/29 12:30, , 15F
樓上讓我想到 TDWTF 最近在回顧第一屆 OMGWTF 的前幾名
05/29 12:30, 15F

05/29 12:31, , 16F
其中就有一個自己實作整數除法的, 有興趣可以去查 OMGWTF
05/29 12:31, 16F

05/29 12:32, , 17F
Finalist #01: The Buddy 4-Function Calculator
05/29 12:32, 17F

06/01 00:32, , 18F
try sizeof( (float*)array )
06/01 00:32, 18F
文章代碼(AID): #1HfDPR_G (C_and_CPP)