[問題] 二維陣列初始化問題

看板C_and_CPP作者 (Huan)時間5年前 (2019/04/02 20:41), 5年前編輯推噓6(6017)
留言23則, 10人參與, 5年前最新討論串1/2 (看更多)
在寫程設矩陣乘法的題目的時候遇到一些問題 完整程式碼在這裡:https://pastebin.com/MxAUgHcY 這是執行結果:https://i.imgur.com/TWB7cYL.png
上面兩區塊是input,即一個2x3矩陣乘上一個3x4矩陣,最下面的區塊是相乘完的結果 中間兩個區塊是測試過程,也就是我的問題所在 以下列出我的問題,基本的程式觀念沒有很好,還請前輩們多多指教 1. 我的作法是先宣告出要存相乘結果的矩陣並初始化,如程式第18行 我記得二維陣列可以用 = {0} 來把全部的內容初始化為0 但做完第18行後,print出新宣告的陣列結果會是測試區塊的上面那塊 出現幾個很大的數字,感覺像是記憶體殘值(? 用for迴圈重新設定每個為0之後才恢復正常全部都是0 是我 = {0} 的使用上有什麼沒注意到的嗎 2. 宣告二維陣列大小的時候,大小是否可以用變數來表示 例如程式碼中的第7行中的m跟k1在scan後才能決定值 那第8行的二維陣列那樣宣告是合法的嗎,還是一定要用malloc的方式才行 我用自己電腦的IDE (CB)跟線上compiler (C99)跑都有過 但同學跑一模一樣的程式碼compiler不給過(VS) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.241.215.254 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1554208886.A.9FE.html ※ 編輯: skyHuan (114.137.5.141), 04/02/2019 20:58:19

04/02 21:27, 5年前 , 1F
{0}不是用在一維嗎 你要二維初始化只能用for loop跑{0}
04/02 21:27, 1F

04/02 21:36, 5年前 , 2F
根本沒有二維陣列這種東西 xD
04/02 21:36, 2F

04/02 22:03, 5年前 , 3F
陣列初始化不能直接這樣用 除非一開始宣告才能直接寫 =
04/02 22:03, 3F

04/02 22:03, 5年前 , 4F
{0}
04/02 22:03, 4F

04/02 22:22, 5年前 , 5F
我是印象中好像有 看這個的語法範例(3)
04/02 22:22, 5F

04/02 22:22, 5年前 , 6F
也有就果斷寫下去了,所以是沒有嗎好的><
04/02 22:22, 6F

04/02 22:22, 5年前 , 7F
剛剛把 = {0} 改成 = {} 初始就不會有問題了... 但查不太到為什麼,還是先乖乖用迴圈初始化好了><

04/02 22:29, 5年前 , 8F
那問題(2) int matrix[m][n]; 其中m, n在
04/02 22:29, 8F

04/02 22:29, 5年前 , 9F
runtime才能知道值,這個宣告法是可行的嗎
04/02 22:29, 9F

04/02 22:29, 5年前 , 10F
還是這種形式就一定要透過動態宣告
04/02 22:29, 10F

04/02 22:29, 5年前 , 11F
我試了有的compiler給過有的不給><
04/02 22:29, 11F

04/02 23:22, 5年前 , 12F
比較嚴格的compiler不行 會叫你先設大小
04/02 23:22, 12F
※ 編輯: skyHuan (36.229.130.164), 04/03/2019 00:15:25

04/03 01:35, 5年前 , 13F
例如codeblock可以 但vs不行
04/03 01:35, 13F

04/03 01:36, 5年前 , 14F
新出的constexpr就是拿來解決這個
04/03 01:36, 14F

04/03 02:07, 5年前 , 15F
了解了,以後還是嚴謹一點多注意這些細節好了,感謝各位
04/03 02:07, 15F

04/03 02:07, 5年前 , 16F
幫忙解答
04/03 02:07, 16F

04/03 09:07, 5年前 , 17F
二樓:有!只是OP 不適用而已。
04/03 09:07, 17F

04/03 09:10, 5年前 , 18F
再看原來是C... 我以為是C++
04/03 09:10, 18F

04/03 09:12, 5年前 , 19F
這我就不太確定了,抱歉亂入 XD
04/03 09:12, 19F

04/03 13:43, 5年前 , 20F
memset(matrix,0,n*m*matrix[0][0])
04/03 13:43, 20F

04/03 22:31, 5年前 , 21F
2要用動態宣告
04/03 22:31, 21F

04/04 13:53, 5年前 , 22F
{{0}}也可以
04/04 13:53, 22F

04/28 23:56, 5年前 , 23F
用{{0}}吧
04/28 23:56, 23F
文章代碼(AID): #1SerXsd- (C_and_CPP)
文章代碼(AID): #1SerXsd- (C_and_CPP)