[问题] 二维阵列初始化问题

楼主: skyHuan (Huan)   2019-04-02 20:41:21
在写程设矩阵乘法的题目的时候遇到一些问题
完整程式码在这里: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)
作者: TitanEric (泰坦)   2019-04-02 21:27:00
{0}不是用在一维吗 你要二维初始化只能用for loop跑{0}
作者: loveme00835 (发箍)   2019-04-02 21:36:00
根本没有二维阵列这种东西 xD
作者: zamperla (地鼠王)   2019-04-02 22:03:00
阵列初始化不能直接这样用 除非一开始宣告才能直接写 ={0}
楼主: skyHuan (Huan)   2019-04-02 22:22:00
我是印象中好像有 看这个的语法范例(3)也有就果断写下去了,所以是没有吗好的><http://rs2.ocu.edu.tw/~jengchi/2Darray_usage.htm那问题(2) int matrix[m][n]; 其中m, n在runtime才能知道值,这个宣告法是可行的吗还是这种形式就一定要透过动态宣告我试了有的compiler给过有的不给><
作者: zamperla (地鼠王)   2019-04-02 23:22:00
比较严格的compiler不行 会叫你先设大小
作者: tomsawyer (安安)   2019-04-03 01:35:00
例如codeblock可以 但vs不行新出的constexpr就是拿来解决这个
楼主: skyHuan (Huan)   2019-04-03 02:07:00
了解了,以后还是严谨一点多注意这些细节好了,感谢各位帮忙解答
作者: adrianshum (Alien)   2019-04-03 09:07:00
二楼:有!只是OP 不适用而已。再看原来是C... 我以为是C++这我就不太确定了,抱歉乱入 XD
作者: achicn3 (Sher)   2019-04-03 13:43:00
memset(matrix,0,n*m*matrix[0][0])
作者: ericlee1027 (小志)   2019-04-03 22:31:00
2要用动态宣告
作者: sDwlr (0.0)   2019-04-04 13:53:00
{{0}}也可以
作者: henrylin8086 (小木)   2019-04-28 23:56:00
用{{0}}吧

Links booklink

Contact Us: admin [ a t ] ucptt.com