我正在做一个实验,将二维数组中的值放到一维数组中。以下是我的代码和结果:
#include <iostream>
using namespace std;
int main()
{
int p[1][1];
int arrayA[4];
for(int i=0;i<2;i++){
for(int j=0;j<2;j++)
{
p[i][j] = i+j;
}
}
int *a = &(p[0][0]);
for(int k=0;k<4;k++)
{
arrayA[k] = *a;
cout << "*a: " << *a << endl ;
cout << "array[k] :" << arrayA[k] << endl;
cout << "a: " << a << endl;
cout << "---------------------------" << endl;
a++;
}
system("PAUSE");
}
结果是:
但我不知道为什么它错过了p 1 [0]的值,该值应为1.但相反,我得到了一个奇怪的数字。因为这对我来说很奇怪,我可以将二维数组中的最后一个数字放到单维数组中,而不是之前的数字。
所以我希望有人可以告诉我代码或我的思考方法会发生什么。谢谢。
答案 0 :(得分:3)
这会导致数组p
超出范围:
int p[1][1];
int arrayA[4];
for(int i=0;i<2;i++){
for(int j=0;j<2;j++)
{
p[i][j] = i+j;
}
}
数组上的索引从0
运行到N - 1
,其中N
是数组的大小。
答案 1 :(得分:1)
问题在于您写道:
int p[1][1];
请记住,在C和C ++中,维度元素的数字是您指的是矢量或矩阵的真实数字。但是,它们的索引从0到n-1(其中n是您编写的数字)。所以你的p声明应该是:
int p[2][2];
代替。 希望这会有所帮助。
答案 2 :(得分:0)
你写了int p[1][1]
,但我认为你的意思是int p[2][2]
。