我有以下代码:
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]的值只会复制值。
答案 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。