Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cの構造体メンバー配列のディープコピー


構造により、ユーザー定義のデータ型を作成できます。構造体メンバーは、プリミティブデータ型にすることも、静的に割り当てられたメモリの配列にすることもできます。ある構造変数を別の構造変数に割り当てると、浅いコピーが実行されます。ただし、例外があります。構造体メンバーが配列の場合、コンパイラーは自動的にディープコピーを実行します。これを例で見てみましょう-

#include <stdio.h>
#include <string.h>
typedef struct student {
   int roll_num;
   char name[128];
}
student_t;
void print_struct(student_t *s) {
   printf("Roll num: %d, name: %s\n", s->roll_num, s->name);
}
int main() {
   student_t s1, s2;
   s1.roll_num = 1;
   strcpy(s1.name, "tom");
   s2 = s1;
   // Contents of s1 are not affected as deep copy is performed on an array
   s2.name[0] = 'T';
   s2.name[1] = 'O';
   s2.name[2] = 'M';
   print_struct(&s1);
   print_struct(&s2);
   return 0;
}

出力

上記のコードをコンパイルして実行すると、次の出力が生成されます-

Roll num: 1, name: tom
Roll num: 1, name: TOM

  1. C /C++の多次元配列

    C / C ++では、多次元配列は簡単な言葉で配列の配列として定義されます。多次元配列では、データは表形式で(行の主要な順序で)格納されます。次の図は、次元が3 x 3x3の多次元配列のメモリ割り当て戦略を示しています。 アルゴリズム Begin    Declare dimension of the array.    Dynamic allocate 2D array a[][] using new.    Fill the array with the elements.    Print the ar

  2. Cの多次元配列

    ここに多次元配列が表示されます。配列は基本的に同種のデータのセットです。それらは連続したメモリ位置に配置されます。さまざまなケースで、配列が1次元ではないことがわかります。 2次元または多次元の形式で配列を作成する必要がある場合があります。 多次元配列は、2つの異なるアプローチで表すことができます。これらは行メジャーアプローチであり、もう1つは列メジャーアプローチです。 r行c列の2次元配列を考えてみましょう。配列内の要素の数はn=r*cです。 0≤i