[問題] 關於矩陣大小

看板C_and_CPP作者時間11年前 (2013/01/20 12:46), 編輯推噓0(0018)
留言18則, 5人參與, 最新討論串1/1
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

01/20 12:56, , 1F
實際上解讀是 bubble(int *a);
01/20 12:56, 1F

01/20 13:02, , 2F
所以在bubble裡用sizeof(a)是算指標大小?
01/20 13:02, 2F

01/20 13:08, , 3F
是。
01/20 13:08, 3F

01/20 13:28, , 4F
那請問想在bubble中計算陣列大小應該怎麼做呢
01/20 13:28, 4F

01/20 13:32, , 5F
辦不到,簡單方式是必須傳一個引數 n 過去
01/20 13:32, 5F

01/20 14:33, , 6F
你的陣列大小會變嗎?
01/20 14:33, 6F

01/20 14:36, , 7F
不會
01/20 14:36, 7F

01/20 14:40, , 8F
不過... 還是傳個大小進去好了
01/20 14:40, 8F

01/20 15:12, , 9F
SIZE不能用吧
01/20 15:12, 9F

01/20 15:43, , 10F
所以沒辦法在function中算大小....
01/20 15:43, 10F

01/20 15:47, , 11F
陣列的大小也是陣列型態的一部分, 像是 int[8] 跟
01/20 15:47, 11F

01/20 15:48, , 12F
int[10] 是不一樣的, 所以除非用指標可以一視同仁的接
01/20 15:48, 12F

01/20 15:49, , 13F
起來, 不然就要變成接受不同型態陣列參數的多種函式
01/20 15:49, 13F

01/20 15:50, , 14F
但是因為 C 沒有 function overloading 所以這些函式
01/20 15:50, 14F

01/20 15:51, , 15F
在呼叫的時候就要選擇型態 match 的版本, 是編譯時期
01/20 15:51, 15F

01/20 15:51, , 16F
就要決定好的事, 所以就顯得很多餘
01/20 15:51, 16F

01/20 16:08, , 17F
01/20 16:08, 17F

01/20 16:21, , 18F
讓compiler幫你生code吧 (被打 http://goo.gl/92Yor
01/20 16:21, 18F
文章代碼(AID): #1G-tQQEE (C_and_CPP)