双维数组到单维数组

时间:2012-04-29 20:07:58

标签: c++ arrays

我正在做一个实验,将二维数组中的值放到一维数组中。以下是我的代码和结果:

#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");    
    }

结果是: enter image description here

但我不知道为什么它错过了p 1 [0]的值,该值应为1.但相反,我得到了一个奇怪的数字。因为这对我来说很奇怪,我可以将二维数组中的最后一个数字放到单维数组中,而不是之前的数字。

所以我希望有人可以告诉我代码或我的思考方法会发生什么。谢谢。

3 个答案:

答案 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]