我有这个:
void duplication(int **tab1, int **tab2, int n, int m)
目标是将 tab1 复制到 tab2 中,所以我会得到相同的两个表。
我该怎么做,因为我知道 usingtab2 = tab1
在我的情况下不起作用:)
对不起,如果这是一个愚蠢的问题,我实际上正在学习 C!
谢谢你。
假设 n 和 m 是维度,并且您知道哪个维度适用于哪个维度,您需要一个类似这样的双循环:
for ( int x = 0; x < n; ++x )
{
for ( int y = 0; y < m; ++y )
{
tab2[x][y] = tab1[x][y];
}
}
鉴于您提供的函数的文档,这是我做出的几个重要假设,但希望代码能让您了解需要做什么,并且您可以在正确的位置替换正确的变量。
为了进一步参考,与这种数据复制相关的术语是所谓的“深度复制”。在处理指针时,复制指针值通常是不够的,而且经常是不安全的。如果您想要更多关于此类代码的参考资料,请搜索“深拷贝”
您可以使用嵌套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];
}
}
}
您应该建立一个具有底层内存“管理”的观点。
可能您正在寻找类似的功能
// 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
(tab[i]
使用i < N
)。如果您有此信息,您可以根据以下内容解决您的问题