正如标题所示,我想将两个数组连接成一个更大的数组。例如:
array1= 1 2 3
4 5 6
7 8 9
array1= 10 20 30
40 50 60
70 80 90
array3= 1 2 3 10 20 30
4 5 6 40 50 60
7 8 9 70 80 90
所以,我写了这段代码:
#include <iostream>
using namespace std;
int main()
{
int array1[3][3],array2[3][3],array3[3][6];
int i,j;
//Matrix 1 input
cout<<"Enter matrix 1\n";
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
cin>>array1[i][j];
array3[i][j]=array1[i][j]; //Assigning array1 values to array3
}
}
//array2 input
cout<<"Enter matrix 2\n";
for (i=0;i<3;i++)
{
for (j=3;j<6;j++)
{
cin>>array2[i][j];
array3[i][j]=array2[i][j]; //Assigning array2 values to array3
}
}
//array3 output
cout<<"New matrix is\n";
for (i=0;i<3;i++)
{
for (j=0;j<6;j++)
{
cout<<array3[i][j]<<"\t";
}
cout<<"\n";
}
}
但是当我执行它时,我得到的最后一行array2是(2,3),(2,4)和(2,5)元素(这是正确的),但也是(0, 1),(0,2)和(0,3)元素(应为[1 2 3])。
array3= 70 80 90 10 20 30
4 5 6 40 50 60
7 8 9 70 80 90
那么,这里发生了什么?
编辑: 我做了以下事情:
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
cin>>array2[i][j];
array3[i][j+3]=array2[i][j]; //Assigning array2 values to array3 and adding 3 to j
}
一切顺利。我使用的方法是“专业的”吗? }
答案 0 :(得分:1)
这是未定义的行为:
for (i=0;i<3;i++)
for (j=3;j<6;j++)
array3[i][j]=array2[i][j];
array2
是3x3,但是你从[0] [3]开始索引,这是一个错误。如果您使用C ++ 11 std::array
及其.at()
方法而不是原始C数组,则可以获得此类事情的运行时检查。
答案 1 :(得分:0)
array2
是一个3x3数组,您可以使用3到6之间的j索引:您可以在内存中的任何地方之外访问
你应该写(例如):
//array2 input
cout<<"Enter matrix 2\n";
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
cin>>array2[i][j]; // j is correct for array2
array3[i][j+3]=array2[i][j]; //Assigning array2 values to array3
}
}