[問題] sizeof ??

看板C_and_CPP作者 (yyyyyyyy)時間16年前 (2009/12/26 16:53), 編輯推噓7(7014)
留言21則, 8人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) #include<iostream> #include<cstdlib> using namespace std; double max(double b[]); int main() { double a; double A[]={3,4,5,6,7}; double B[]={3.1,5.1,5.2,5.5,10,100}; //cout<<sizeof(A)/sizeof(double); a=max(A); cout<<"max of A="<<a<<endl; a=max(B); cout<<"max of B="<<a<<endl; return 0; } double max(double b[]) { int lena=sizeof(b)/sizeof(double); for(int n=0;n<lena;n++) { if(b[n]<=b[0]) { b[0]=b[n]; } } return b[0]; } 遇到的問題: (題意請描述清楚) 為什麼我的 lena永遠都是0 我用偵錯去看 函式內sizeof(b)b只有單質不是陣列 到底是哪裡出了差錯 請問各位大德了 希望得到的正確結果: 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) 有問題的code: (請善用置底文標色功能) 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 192.83.177.32

12/26 17:10, , 1F
sizeof 只能用在靜態取值 函式請自行傳入大小
12/26 17:10, 1F

12/26 18:48, , 2F
我想請問一下,讀到的真的是單值嗎?如果是四的話
12/26 18:48, 2F

12/26 18:48, , 3F
(32-BIT MACHINE)應該會抓到4,一個指標的大小喔
12/26 18:48, 3F

12/26 18:49, , 4F
而不是單一DOUBLE的大小
12/26 18:49, 4F

12/26 20:37, , 5F
sizeof是compiler的假指令不是真的function
12/26 20:37, 5F

12/26 20:38, , 6F
所以sizeof的回傳值都是在compile time時就由compiler算好了
12/26 20:38, 6F

12/26 20:39, , 7F
你的想法是要在run time時知道b的大小
12/26 20:39, 7F

12/26 20:40, , 8F
這種情況下沒辦法直接用sizeof來抓
12/26 20:40, 8F

12/26 23:30, , 9F
用結構或是類別封裝陣列的指標與陣列的長度…
12/26 23:30, 9F

12/26 23:31, , 10F
再把結構或是類別傳入函式內。
12/26 23:31, 10F

12/26 23:32, , 11F
struct ARR{ double* p; size_t size; };
12/26 23:32, 11F

12/26 23:33, , 12F
或是 class CArr{ double* p; size_t size; };
12/26 23:33, 12F

12/26 23:35, , 13F
函式:double max(ARR ar); 或是 double max(CArr ar);
12/26 23:35, 13F

12/26 23:41, , 14F
變更內容:double max(ARR& ar);與 double max(CArr& ar);
12/26 23:41, 14F

12/27 00:05, , 15F
還不如直接#include<vector>
12/27 00:05, 15F

12/27 01:09, , 16F
推樓上
12/27 01:09, 16F

12/27 03:30, , 17F
C++ 可以用 template function ...
12/27 03:30, 17F

12/27 12:52, , 18F
因為你傳進去的是指標 不是陣列
12/27 12:52, 18F

12/27 12:53, , 19F
參數列上的陣列是Compiler唬你的ㄎㄎ
12/27 12:53, 19F

12/27 12:53, , 20F
實際上的function是 double max(double* b)
12/27 12:53, 20F

12/27 12:53, , 21F
所以sizeof(b)當然是一個指標的大小
12/27 12:53, 21F
文章代碼(AID): #1BDSy4aw (C_and_CPP)