如何在C中实现变量的dup函数

时间:2013-01-25 18:16:57

标签: c pointers

我有这个:

void duplication(int **tab1, int **tab2, int n, int m)

目标是将tab1复制到tab2,所以我将获得相同的两个表。

我怎么能这样做,因为我知道在我的情况下使用tab2 = tab1不起作用:)

对不起,如果这是一个愚蠢的问题,我实际上是在学习C!

谢谢。

3 个答案:

答案 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?