2017-03-16 41 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的阵列