-2

私はこれを持っています:

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

目標は、tab1 を tab2 にコピーすることなので、同じ 2 つのテーブルを取得します。

私の場合、 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

基礎となるメモリの「管理」を念頭に置いて、視点を確立する必要があります。

おそらくあなたは次のような関数を探しています

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

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

の先頭からn先頭にバイトをコピーします。srcdest

あなたの質問に関連して、この関数を使用したい場合は、ポイントN先のオブジェクトのサイズと、ポイント先*tab1の各オブジェクトのサイズを知る必要があります( with )。この情報があれば、次のように問題を解決できますM_itab[i]i < N

C / C ++ネストされたループなしで多次元char配列をコピーする方法は?

于 2013-01-25T18:34:07.147 に答える
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 に答える