int数组尾随零
我想输出一个四维的int类型数组的内容。然而,输出是正确的,但有一些尾随的零,我不了解它们的来源。任何人都有线索?int数组尾随零
源代码:
int main(int argc, char **argv) {
int i,j,k,m;
int nmArrays[5][5][5][5]= {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};
for(i=0;i<5;i++){//subArray 0,0
for(j=0;j<5;j++){//subArray 1,0
for(k=0;k<5;k++){//subArray 2,0
for(m=0;m<5;m++){//subArray 3,0
cout<<nmArrays[i][j][k][m];
}
}
}
cout<<""<<std::endl;
}
getchar();
}
输出:
12345000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
678910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1112131415000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1617181920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
{{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};
是2 d阵列,更具体地它是5X5
矩阵。
你在找什么是5x5x5x5
数组。
更多的见解:你的第一个初始化列表{1,2,3,4,5}
,用于填充大小5x5x5
的第一子阵列和补零,因为你只提供第一5
项,不125
值。 类似的是其余子阵列的行为。
为简单起见,假设您的5x5x5x5
数组为{ 5x5x5 subaary no 0,5x5x5 subaary no 1,5x5x5 subaary no 2,5x5x5 subaary no 3,5x5x5 subaary no 4}
。所以相应地,您的初始化程序列表用于初始化用零填充的每个子数组。
不,它是数字列表用逗号分隔并用大括号分隔。 'nmArrays'是数组,它实际上是4维的。 (好吧,我们将数组描述为二维数组等)。 –
@ M.M,我的朋友在C++中没有真正的内在列表。想想它如何奠定在记忆中! – v78
支撑列表根本不放在内存中。只有'int nmArrays [5] [5] [5] [5]'的声明指定了内存布局。然后,初始化程序的列表适合该内存布局。该列表没有任何内部布局。 –
任何人都有线索?
你在做什么是初始化4*5 = 20
元素(理论上是2D矩阵,但在内存中它总是一个数组)。 虽然你有一个5*5*5*5
(= 625 elements
)矩阵。
所以,你没有初始化的所有位置都被0填充。
你应该编辑你的其他答案,而不是删除它并发布另一个相同的 –
@granmirupa谢谢。 – m88
@ M.M,这是没有解释答案有什么问题而不合格的原因? – granmirupa
你期望输出什么?你的数组有625个条目;您只为其中的20个设置非零值。所以你应该在输出中得到605尾随零。 –
您有一个5 * 5 * 5 * 5元素的数组,但只能用4 * 5显式值进行初始化。 –
该数组包含625个值,并且您只给出20个值。其余部分默认设置为零。 –