如何将2d数组的行复制到1d数组?
在我做完之前我确信这样做:
int x,y;
scanf("%d%d", &x,&y);
int one[x];
int two[y][x];
one=two[0];
但现在它给了我错误:
分配中不兼容的类型
修改
好的,我的坏。 我忘了我不能以这种方式复制数组,但我可以传递单行的2d数组作为参数。解决。
答案 0 :(得分:3)
你做不到
one=two[0]; // Illegal assignment in C
数组名称是不可修改的l值。它不能是赋值运算符=
的左操作数。你可以这样做
one[x] = two[y][x];
答案 1 :(得分:3)
您正尝试从二维数组分配到一维数组!您将必须循环遍历2-d数组并选择每个单独的值并插入到1-d数组中。
答案 2 :(得分:1)
只需使用此代码:
int col,rowToCopy=0;
for(col=0;col<x;col++){
one[col]=two[rowToCopy][col];
}
答案 3 :(得分:0)
似乎不被接受(我不完全确定 - 我会看起来更好)。
该语言的语义是,对于一维数组,数组的名称是指向数组元素类型的指针,而指向第一个元素的指针。 在您的情况下,数组只是一个类型为(int *)的指针。
在任何(int *)上我们可以应用[]括号。 我检查过的这些括号只是翻译,将方括号内的数字添加到指针(使用指针算术)并对指针应用解除引用。 换句话说:
int *p;
p[nn] is equivalent to *(p+nn);
所以在那个有下面代码的愿景中:
int a[8],b[8];
a=b;
执行a = b只能将指针b的内容复制到指针a。 但是因为数组是一个常量指针,没有可能改变,这是不可能的。 所以上面的代码会报告错误; 如果有可能,它会将数组b开始的地址复制到指针a。 而且任何方式都不是你需要的或你期望的。
这就是C处理数组的方式(感谢我不得不考虑它)。
如果尺寸固定,我会这样做:
typedef struct{int arr[0x4];}S;
S a,b;
a=b;
要访问数组,您应该使用:a.arr []和b.arr []
如果你需要一个数组数组,扩展到你的情况就很简单了。
问题是在你的情况下,大小是动态的。
唯一简单的解决方案是使用:
memcpy(a,b,sizeof(a));
具有根据需要将b复制到a的效果。其他所有解决方案都比较复杂。
答案 4 :(得分:0)
以下代码可以解决您的问题:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int i,row,col,col1;
char value1[10][4]={};
char *value2;
value2 = new char[40];
/** Creating a 2D char array ***/
for(i=0;i<8;i++)
{
strcpy(value1[i],"MK,");
}
value1[7][strlen(value1[7])-1]='\0';
/*** Printing the 2D array ****/
for(i=0;i<8;i++)
{
cout<<"\n\n value1[i]="<<value1[i];
}
/*** assigning the 2D array value1[][] to string value2 **/
col1=0;
for(row=0;value1[row][0]!='\0';row++)
{
for(col=0;value1[row][col]!='\0';col++)
{
*(value2+col1) = value1[row][col];
col1++;
}
}
*(value2+col1)='\0';
/** assignment done ***/
cout<<"\n\nSize of rows="<<row<<"\n\nSize of Column="<<col;
cout<<"\n\nvalue1="<<value1[0];
cout<<"\n\nValue2="<<value2;
return 0;
}