我有这个:
void duplication(int **tab1, int **tab2, int n, int m)
目标是将tab1复制到tab2,所以我将获得相同的两个表。
我怎么能这样做,因为我知道在我的情况下使用tab2 = tab1
不起作用:)
对不起,如果这是一个愚蠢的问题,我实际上是在学习C!
谢谢。
答案 0 :(得分:2)
假设n和m是维度,并且您知道哪个维度适用于哪个维度,则需要这样的双循环:
for ( int x = 0; x < n; ++x )
{
for ( int y = 0; y < m; ++y )
{
tab2[x][y] = tab1[x][y];
}
}
根据您提供的函数的文档,我做了几个很大的假设,但希望代码能让您了解需要做什么,并且可以在正确的位置替换正确的变量。
为了进一步参考,与此类数据复制相关的术语是所谓的“深层复制”。处理指针时,复制指针值通常不够,而且经常不安全。如果您想要更多关于此类代码的参考,请搜索“深层复制”
答案 1 :(得分:0)
您可以使用嵌套的for
循环。通常重复任何变量,重复变量的内存分配应该在该函数内完成。复制功能应如下所示。
int ** dup_tab(int **sr_table, int n, int m)
{
int **dest_tabl = NULL;
int i = 0;
int j = 0;
dest_tabl = malloc(sizeof(int *) * n);
for (i = 0; i < n; i++)
{
dest_tabl[i] = malloc(sizeof(int) * m);
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
dest_tabl[i][j] = sr_table[i][j];
}
}
}
答案 2 :(得分:0)
您应该牢记基础记忆“管理”的观点。
可能你正在寻找像
这样的功能// defined in <string.h> and conform to C99
void memcpy(void *dest, const void *src, size_t n);
将n
字节从src
开头复制到dest
的开头。
与您的问题相关,如果您想使用此功能,您必须知道N
指向的对象的大小*tab1
以及每个对象的大小M_i
其中{ {1}}指向(tab[i]
)。如果您有这些信息,可以根据
C / C++ How to copy a multidimensional char array without nested loops?