a
構造体をb
構造体に割り当てたいとします。関数呼び出しの前後で配列のアドレスと値を表示すると、関数呼び出し中に代入が機能し、両方のポインタが同じ構造体アドレスを指していることが示されます。ただし、関数から戻った後、変更は元に戻ります。どうして?参照取得関数を介して構造体を変更します。
typedef struct arrayA {
int a[3];
}arrayA;
void f(arrayA *a, arrayA *b){
a = b;
printf("address of a: %p\n", a);
printf("address of b: %p\n", b);
}
int main(int argc, char *argv[]) {
printf("------------ Array assignment test -----------------\n");
arrayA a = { { 0, 0, 0} };
arrayA b = { { 1, 1, 1} };
printf("address of a: %p\n", &a);
printf("address of b: %p\n", &b);
printf("a[0] : %d a[1] : %d\n", a.a[0], a.a[1]);
f(&a, &b);
printf("a[0] : %d a[1] : %d\n", a.a[0], a.a[1]);
printf("address of a: %p\n", &a);
printf("address of b: %p\n", &b);
printf("----------------------------------------------------\n");
return 0;
}
プリント
------------ Array assignment test -----------------
address of a: 0x7ffd3fc17b80
address of b: 0x7ffd3fc17b90
a[0] : 0 a[1] : 0
address of a: 0x7ffd3fc17b90
address of b: 0x7ffd3fc17b90
a[0] : 0 a[1] : 0
address of a: 0x7ffd3fc17b80
address of b: 0x7ffd3fc17b90
----------------------------------------------------
'a = b;'。標準的な初心者の問題。関数のパラメータは、Cの*値で渡されます。関数内のパラメータに対する変更は、呼び出し元の変数には影響しません。 – kaylum
どのように参照して渡すことができますか? – SebNag
正確に何を達成したいですか?内容をコピーしたい場合は 'memcpy(a、b、sizeof(* b))'や '* a = * b'を使います。 – kaylum