不使用指针将数组转换为多维C

时间:2018-02-24 00:22:15

标签: c arrays multidimensional-array

首先,我想知道它是否可行。如果是这样,请查看我的代码并告诉我出了什么问题。

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-如果我需要使用指针,你也可以这样解释我,但我更喜欢第一个。

2 个答案:

答案 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++];
   }
}