私はこれを持っています:
void duplication(int **tab1, int **tab2, int n, int m)
目標は、tab1 を tab2 にコピーすることなので、同じ 2 つのテーブルを取得します。
私の場合、 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];
}
}
これは、あなたが提供する関数のドキュメントを考慮して私が行っているいくつかの大きな仮定ですが、うまくいけば、コードが何をする必要があるかのアイデアを与え、正しい場所で正しい変数を置き換えることができます.
参考までに、この種のデータ コピーに関連する用語は、「ディープ コピー」と呼ばれるものです。ポインターを扱う場合、ポインター値をコピーするだけでは通常不十分であり、多くの場合安全ではありません。このタイプのコードについてさらに参照が必要な場合は、「ディープ コピー」を検索してください。
基礎となるメモリの「管理」を念頭に置いて、視点を確立する必要があります。
おそらくあなたは次のような関数を探しています
// defined in <string.h> and conform to C99
void memcpy(void *dest, const void *src, size_t n);
の先頭からn
先頭にバイトをコピーします。src
dest
あなたの質問に関連して、この関数を使用したい場合は、ポイントN
先のオブジェクトのサイズと、ポイント先*tab1
の各オブジェクトのサイズを知る必要があります( with )。この情報があれば、次のように問題を解決できますM_i
tab[i]
i < N
ネストされた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];
}
}
}