C++一维数组怎样给二维数组赋值,如int a[]={1,2}给int b[3][2]赋值(不用循环,实际数组很大),谢谢。

如题所述

b[0][0]=a[0],如此循环,实例如下:
for(int i=0;i<2*3;i++)//循环次数是二维数组的总的元素个数,根据你说的例子,我已经假设二维数组是3行2列,且一维数组的元素个数大于等于二维数组的元素个数,否则无法完全给二维数组赋值
{
b[i/2][i%2]=a[i];
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-21
那你也要说明存值的方式啊,如果只是随便存进去的话就没有了意义,数据的本质是进行读或者写,而我们要做的就是按照实现的方式去存或者取,否则这数据就没有了意义!
第2个回答  2014-01-21
#include <string.h>
int a[] = {1,2};
int b[2][3];
memcpy((void*)b, (void*)a, sizeof(a));
这样符合要求不。追问

如果想赋值给b的第二行怎么办,谢谢。

追答

memcpy((void*)((int *)b + 3), (void*)a, sizeof(a));
反正二位数组内存中也是连续的,就像:b[0][0],b[0][1],b[0][2],b[1][0],b[1][1],b[1][2],所以安排好a[]的数据一次性全部赋值也可以啊。

本回答被提问者采纳
第3个回答  2014-01-21
使用指针,把首地址给他,追问

我是这样想的,不过具体的代码应该怎么写呢?

追答

数列的存储都是按一维度存储的,二维和高维都是在一维度上划分的,。你给二维度的赋值,那一维度空间一定要满足维度。定义int b[3][3];
b[2][1] 和*(b+2*3+1)以及b[7]都是一样的。

追问

谢啦,不过其他的大神已经给出了代码了。

第4个回答  2014-01-21
突出一个懒 编译器哪有这么聪明 你不用循环他怎么知道你是竖着排还是横着排追问

忘说了,横着排

追答

用循环最简单了 c++里没有一维数组初始化二维数组的定义

int main()
{
int a[6] = {1,2,3,4,5,6};
int b[2][3];

int k=0;
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
b[i][j]=a[k];
k++;
}
}
return 0;
}

2个循环嵌套下就行了

追问

多谢了,不过另一位大神给出了更好的解答。

相似回答