-2

我有这个:

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

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

我该怎么做,因为我知道 usingtab2 = tab1在我的情况下不起作用:)

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

谢谢你。

4

3 回答 3

2

假设 n 和 m 是维度,并且您知道哪个维度适用于哪个维度,您需要一个类似这样的双循环:

for ( int x = 0; x < n; ++x )
{
    for ( int y = 0; y < m; ++y )
    {
        tab2[x][y] = tab1[x][y];
    }
}

鉴于您提供的函数的文档,这是我做出的几个重要假设,但希望代码能让您了解需要做什么,并且您可以在正确的位置替换正确的变量。

为了进一步参考,与这种数据复制相关的术语是所谓的“深度复制”。在处理指针时,复制指针值通常是不够的,而且经常是不安全的。如果您想要更多关于此类代码的参考资料,请搜索“深拷贝”

于 2013-01-25T18:23:10.210 回答
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];
         }
     }
}
于 2013-01-25T18:27:40.200 回答
0

您应该建立一个具有底层内存“管理”的观点。

可能您正在寻找类似的功能

// defined in <string.h> and conform to C99

void memcpy(void *dest, const void *src, size_t n); 

n它将字节从 的开头复制srcdest.

与您的问题相关,如果您想使用此功能,您必须知道指向N的对象*tab1的大小以及指向的每个对象的大小M_itab[i]使用i < N)。如果您有此信息,您可以根据以下内容解决您的问题

C / C ++如何复制没有嵌套循环的多维char数组?

于 2013-01-25T18:34:07.147 回答