この質問はC++に関するものです
C ++での配列の名前は単なるポインタだといつも思っていたので、
int ar[10];
cout << sizeof(ar);
と同じように表示されsizeof(int *)
ます。しかし、それは40を与えます-したがって、それは配列全体の実際のサイズです。また、配列サイズが変数で指定されている場合は40になります。
int n = 10;
int ar[n]
配列を含むクラスをコピーしたい。演算子で割り当てられる場合はnew
、コピーコンストラクター内でこの配列を手動でコピーする必要があります。しかし、一定サイズの配列はどうですか?クラスには配列へのポインタのみが含まれていますか、それとも配列全体が含まれていますか?ここで簡単memcpy(...)
に安全ですか?
編集:別の例:
int n;
cin >> n;
int ar[n];
cout << sizeof(ar);
n*4を出力します。Linuxでg++を使用しています。
私もこれを試しました:
class Test {
public:
int ar[4];
};
と
Test a, b, c;
a.ar[0] = 10;
b = a;
memcpy(&c, &a, sizeof(a));
a.ar[0] = 20;
cout << "A: " << a.ar[0] << endl;
cout << "B: " << b.ar[0] << endl;
cout << "C: " << c.ar[0] << endl;
そしてそれは与える:
A: 20
B: 10
C: 10
したがって、配列はクラスの一部として格納され、memcpyを使用してコピーできます。しかし、それは安全ですか?