-2

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

#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。但是相反,我得到了一个奇怪的数字,它来自哪里。因为这对我来说很奇怪,我可以将二维数组中的最后一个数字放到一维数组中,而不是之前的数字。

所以我希望有人能告诉我代码或我的思维方式发生了什么。谢谢你。

4

3 回答 3

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;
    }
}

数组上的索引从0N - 1,其中N是数组的大小。

于 2012-04-29T20:11:08.180 回答
1

问题是你写的:

int p[1][1];

请记住,在 C 和 C++ 中,维度元素上的数字是您所指的向量或矩阵所具有的真实数字。但是,它们的索引从 0 到 n-1(其中 n 是您写的数字)。所以你的 p 声明应该是:

int p[2][2];

反而。希望这可以帮助。

于 2012-04-29T20:11:37.150 回答
0

你写了int p[1][1],但我认为你的意思是int p[2][2]

于 2012-04-29T20:12:08.357 回答