这两个阵列之间有区别吗?

时间:2017-03-16 14:22:02

标签: c++ arrays

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 个答案:

答案 0 :(得分:4)

如果kernel_size为7,则没有区别。否则,他们是不同的。

第一个版本将按顺序使用初始化程序以逐行方式初始化整行(并且如果有的话,对数组的其余部分进行零初始化)

第二个版本将跳到每个内部float [kernel_size]的下一个{子阵列(行)(它将零行初始化每行的剩余部分,如果有的话)。

如果kernel_size大于7,则显然会导致第二个版本中的初始化布局不同。

答案 1 :(得分:0)

是的,那些是等价的!指示预期行的嵌套大括号是可选的。 Here你可以看到例子。

答案 2 :(得分:0)

第一个是具有49个条目的1个dia阵列,第二个是具有7x7个条目的2个dia阵列