2017-03-16 73 views
0
float kernel[kernel_size][kernel_size] = { 
     0.000036, 0.000363, 0.001446, 0.002291, 0.001446, 0.000363, 0.000036, 
     0.000363, 0.003676, 0.014662, 0.023226, 0.014662, 0.003676, 0.000363, 
     0.001446, 0.014662, 0.058488, 0.092651, 0.058488, 0.014662, 0.001446, 
     0.002291, 0.023226, 0.092651, 0.146768, 0.092651, 0.023226, 0.002291, 
     0.001446, 0.014662, 0.058488, 0.092651, 0.058488, 0.014662, 0.001446, 
     0.000363, 0.003676, 0.014662, 0.023226, 0.014662, 0.003676, 0.000363, 
     0.000036, 0.000363, 0.001446, 0.002291, 0.001446, 0.000363, 0.000036 
}; 


float kernel[kernel_size][kernel_size] = { 
      {0.000036, 0.000363, 0.001446, 0.002291, 0.001446, 0.000363, 0.000036}, 
      {0.000363, 0.003676, 0.014662, 0.023226, 0.014662, 0.003676, 0.000363}, 
      {0.001446, 0.014662, 0.058488, 0.092651, 0.058488, 0.014662, 0.001446}, 
      {0.002291, 0.023226, 0.092651, 0.146768, 0.092651, 0.023226, 0.002291}, 
      {0.001446, 0.014662, 0.058488, 0.092651, 0.058488, 0.014662, 0.001446}, 
      { 0.000363, 0.003676, 0.014662, 0.023226, 0.014662, 0.003676, 0.000363}, 
      {0.000036, 0.000363, 0.001446, 0.002291, 0.001446, 0.000363, 0.000036} 
     }; 

正如你所看到的,第二個數組對每一行都有額外的{}。這兩個數組有區別嗎?

如果我用另一個替換它們中的一個,這兩個等價的或者程序的行爲是否不同?

+3

不知道'kernel_size'是不可能的。 – AnT

+1

取決於。如果'kernel_size == 7',它是一樣的。否則它不是。 –

+1

是的kernel_size == 7,對不起,我忘了添加 –

回答

4

如果kernel_size是7,則沒有區別。否則,他們是不同的。

第一個版本將使用的初始化順序地一行接一行的方式來初始化整行(和零初始化所述陣列的其餘部分,如果有的話)

第二版本將跳到下一float [kernel_size]在每個內部{(它將零初始化每行的其餘部分,如果有的話)的子陣列(行)。

如果kernel_size大於7,這顯然會導致在第二版本中不同的初始化佈局。

+0

你應該解釋他們爲什麼不同。如果'kernel_size'大於7,那麼一些元素不會被初始化,並且它們的值是隨機的。如果小於7,則表示索引出錯。 –

+2

@SembeiNorimaki我很確定元素缺少初始化器是零初始化的。 – NathanOliver

+1

@SembeiNorimaki,如果大於7,其餘元素將爲0,而不是隨機的。如果小於7,則該程序不合格(不會編譯)。 – chris

0

是的,那些是相同的!指示預期行的嵌套括號是可選的。 Here你可以看到例子。

0

第一個是1個直徑爲49的陣列,第二個是2個直徑爲7x7的陣列