首先,我想知道它是否可行。如果是这样,请查看我的代码并告诉我出了什么问题。
int m[n]; // this is where I pass the values to a array
for(int i=0;i<n;i++) {
scanf("%d",&a);
m[i]=a;
}
int v[n][b]; // this is where I pass the values from a array to a 2d array
for(int i=0;i<n;i++) { // but for some reason it doesnt work
for(int j=0;j<b;j++) {
v[i][j]=m[i];
}
}
}
输出是: 像这样的东西
v[0][0]:0
v[0][1]:0
v[1][0]:1
v[1][1]:1
....
但我想要这样的事情:
v[0][0]:0
v[0][1]:1
v[1][0]:2
v[1][1]:3
不重复值
P.S-如果我需要使用指针,你也可以这样解释我,但我更喜欢第一个。
答案 0 :(得分:1)
在分配给v[i][j]
时,您会不断重新分配m[i]
中的任何值。
而是尝试:
v[i][j] = m[i*n + j];
只有当数组m
具有n*b
个元素时才会起作用。
i*n
表示您正在处理的行,j
是列。反之亦然,这取决于你如何想象它。
答案 1 :(得分:0)
假设您的1D数组中的元素至少与2D数组一样多,并且您希望以行主要顺序填充2D数组,那么每次读取元素时只需增加1D数组的索引即可从它。
int v[n][b];
int k = 0;
for(int i=0;i<n;i++) {
for(int j=0;j<b;j++) {
v[i][j]=m[k++];
}
}