如何在C中复制到数组?

时间:2015-10-13 09:13:33

标签: c

我有以下代码:

for( i = 0; i < m; ++i){
        for( j = 0; j < m && index[x[i]][j] >= 0; ++j){
            printf("%d ", index[x[i]][j]);
        }
}

在上面,我需要索引[x [i]] [j]的所有值到一个单维数组中,比如说B []。

分配b [j]的值只会复制值。

3 个答案:

答案 0 :(得分:3)

假设你想以行主要顺序存储并且你有m行和n列,这应该复制:

for( i = 0; i < m; ++i){
    for( j = 0; j < n; ++j){
        b[i*n + j] = index[x[i]][j];
    }
}

确保b的大小为m * n。例如int b[m*n];

同样在您的代码中,您只打印非负数。如果您只想复制非负值,则可能需要在b中为b设置一些默认值。

答案 1 :(得分:2)

另一种解决方案,正如您使用int arrays一样,使用memcpy

如果要复制二维数组中的所有值(复制连续内存),此方法可以正常工作。

  

memcpy()函数将n个字节从内存区域src复制到内存          区域目的地。内存区域不得重叠。使用memmove(3)如果          记忆区域确实重叠。

memcpy(B, index, sizeof(index[0][0])*m*m)

答案 2 :(得分:2)

您可以为b数组索引设置单独的变量。并将值分配给b数组。如下所示。

int pos=0;
for( i = 0; i < m; ++i){
    for( j = 0; j < n; ++j){
        b[pos++] = index[x[i]][j];
    } 
}

这会将索引[x [i]] [j]中的所有值分配给一维数组b。