C 二维数组到一维数组

新手上路,请多包涵

我正在尝试将 2D 数组转换为 1D。我对 C/C++ 非常陌生,但我认为学习如何将 2D 数组转换为 1D 非常重要。所以在这里我偶然发现了这个问题。

到目前为止,我的代码是 http://ideone.com/zvjKwP

 #include<iostream>

using namespace std;

int main()
{

int n=0,m=0; // 2D array nRow, nCol
int a[n][m];
int i,j; // цикъл въвеждане 2D
int q,p,t; // for 2D=>1D
int b[100];
int r; // for cout
cout<<"Enter the array's number of rows and columns: ";
cin>>n>>m;

// entering values for the 2D array
    for (i = 0;i<=n;i++)
    {
        for (j = 0;j<=m;j++)
        {
            cout<<"a["<<i<<"]["<<j<<"]="<<endl;
            cin>>a[i][j];
            cin.ignore();
        }
    }

  // Most likely the failzone IMO
  for (q = 0;q<=i;q++)
    {
        for (t = 0;t<=i*j+j;t++)
        {
            b[t] = a[i][j];
        }
    }
    // attempting to print the 1D values
     cout<<"The values in the array are"<<"\n";
    for(r=0;r<=t;r++)
    {
        cout<<"b["<<r<<"] = "<<b[r]<<endl;
    }

    cin.get();
    return 0;
    }

我在我认为我失败的地方写了一条评论。

我还必须将进入 1D 的数字限制为 value^2 大于 50 的数字。但我肯定必须通过转换 2D=>1D 来解决问题你能帮帮我吗?

原文由 Anton Antonov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 553
2 个回答

你的假设是对的:

循环应该是这样的:

 for (q = 0; q < n; q++)
{
    for (t = 0; t < m; t++)
    {
        b[q * m + t] = a[q][t];
    }
}

从高维数组的角度考虑这种转换总是更容易。此外,您的代码实际上并未在 b 分配周期中修改 ij ,因此您不应期望将不同的值分配给不同的数组 b 的成员。

原文由 Boris Strandjev 发布,翻译遵循 CC BY-SA 4.0 许可协议

你也可以这样做;

 int singleArraySize = columns * rows;
for (int i = 0; i < singleArraySize; ++i)
    *(oneDArr + i) = *(twoDArr + i);

第二个例子是利用二维数组占据连续空间的事实。

因此,如果您有 array[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}} 在计算机内存中,则存储如下:

 memory address | array[i][j] | value
---------------+-------------+---------
0x1            | array[0][0] | 1
0x2            | array[0][1] | 2
0x3            | array[0][2] | 3
0x4            | array[1][0] | 4
0x5            | array[1][1] | 5
0x6            | array[1][2] | 6
0x7            | array[2][0] | 7
0x8            | array[2][1] | 8
0x9            | array[2][2] | 9

其中内存地址是存储值的地址。

原文由 user5550963 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题