我就不看你的bubble sort的演算法部分了,直接跟你講你不知道錯誤的原因。你第一種寫法:int n=1, a[n], i=0, j=0, k=0;這裡你已經定義n = 1, 而a[n]也在該行定義。那麼編譯器在此就直接給a這個數列分配記憶體了。也就是說你a這個陣列大小就確定了,即為1。我不知道你學了記憶體分配沒有,簡單給你講解一下,具體你可以在網上搜。比如一個含有5個整數型別的陣列可以這樣定義a[5],但是也可以這樣獲得:int *a = (int *) malloc ( sizeof( int ) * 5 ); 也就是說我們給一個指標分配了記憶體,從而得到一個數組,而a[5]這樣定義也是需要編譯器在編譯程式的時候分配記憶體的而編譯器會根據你的程式碼最佳化你的程式,並把程式碼轉化為彙編再者machine code說多了,繼續給你分析你修改過的程式碼int n=1, i=0, j=0, k=0;printf("請輸入陣列長度:");scanf("%d", &n);int a[n]; //修改這個時候由於你在宣告陣列之前就已經讀入n了,所以a這個時候才是根據你輸入的數字所得大小的陣列。這樣你懂我的意思了嗎?
我就不看你的bubble sort的演算法部分了,直接跟你講你不知道錯誤的原因。你第一種寫法:int n=1, a[n], i=0, j=0, k=0;這裡你已經定義n = 1, 而a[n]也在該行定義。那麼編譯器在此就直接給a這個數列分配記憶體了。也就是說你a這個陣列大小就確定了,即為1。我不知道你學了記憶體分配沒有,簡單給你講解一下,具體你可以在網上搜。比如一個含有5個整數型別的陣列可以這樣定義a[5],但是也可以這樣獲得:int *a = (int *) malloc ( sizeof( int ) * 5 ); 也就是說我們給一個指標分配了記憶體,從而得到一個數組,而a[5]這樣定義也是需要編譯器在編譯程式的時候分配記憶體的而編譯器會根據你的程式碼最佳化你的程式,並把程式碼轉化為彙編再者machine code說多了,繼續給你分析你修改過的程式碼int n=1, i=0, j=0, k=0;printf("請輸入陣列長度:");scanf("%d", &n);int a[n]; //修改這個時候由於你在宣告陣列之前就已經讀入n了,所以a這個時候才是根據你輸入的數字所得大小的陣列。這樣你懂我的意思了嗎?