看板 C_and_CPP 關於我們 聯絡資訊
int main(void) { int i; int a[]={24,22,31,4}; bubble(a); system("pause"); return 0; } void bubble(int a[]) { int i,j,temp,SIZE=sizeof(a)/sizeof(a[0]); printf("%d",sizeof(a)); for(j=1;j<SIZE;j++) { for(i=0;i<SIZE-j;i++) { if (a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } } 如題 在做bubble sort的時候 為什麼在function 中的 sizeof(a)答案會是4 不是應該是16嗎?? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.13.62
EdisonX:實際上解讀是 bubble(int *a); 01/20 12:56
tobashi:所以在bubble裡用sizeof(a)是算指標大小? 01/20 13:02
EdisonX:是。 01/20 13:08
tobashi:那請問想在bubble中計算陣列大小應該怎麼做呢 01/20 13:28
EdisonX:辦不到,簡單方式是必須傳一個引數 n 過去 01/20 13:32
loveme00835:你的陣列大小會變嗎? 01/20 14:33
tobashi:不會 01/20 14:36
loveme00835:不過... 還是傳個大小進去好了 01/20 14:40
tjjh89017:SIZE不能用吧 01/20 15:12
tobashi:所以沒辦法在function中算大小.... 01/20 15:43
loveme00835:陣列的大小也是陣列型態的一部分, 像是 int[8] 跟 01/20 15:47
loveme00835:int[10] 是不一樣的, 所以除非用指標可以一視同仁的接 01/20 15:48
loveme00835:起來, 不然就要變成接受不同型態陣列參數的多種函式 01/20 15:49
loveme00835:但是因為 C 沒有 function overloading 所以這些函式 01/20 15:50
loveme00835:在呼叫的時候就要選擇型態 match 的版本, 是編譯時期 01/20 15:51
loveme00835:就要決定好的事, 所以就顯得很多餘 01/20 15:51
loveme00835:http://ideone.com/KM1day 01/20 16:08
PkmX:讓compiler幫你生code吧 (被打 http://goo.gl/92Yor 01/20 16:21