0

A という構造体ポインタと B という構造体ポインタがあるとします。

struct example{
//variables and pointers
}*A 

そして、私はデータ型構造体の例のポインタを持っています:

struct example *B=malloc(sizeof(struct example));

私が行った場合

A=B;

この算術演算は、構造体ポインタ B が指しているものが構造体ポインタ A も指しているということですか? プリミティブデータ型とポインターで取得しますが、内部に変数があるため、構造体が混乱します..

構造体ポインタ A が設定され、すべてが設定されていると仮定します

4

5 に答える 5

3

はい、次のコード行で、Aは同じ場所を指している必要があり、Bは指していました。

/* Define the struct example datatype */
struct example{
    //variables and pointers
};

/* Declare A and B as pointers to struct example */
struct example *A;
struct example *B;

/* Allocate memory equivalent to the size of struct example
   and store the address in B */
B=malloc(sizeof(struct example));

/* Copy the address in B to A, so that A points to the same
   location B was pointing to */
A = B;

ポインタは、メモリへのアドレスを保持する単なる別の変数と考える必要があります(ポインタはunsigned long保持するアドレスを指すだけなので)。

他の変数と同様に、あるポインタ変数に格納されているアドレスを別の変数にコピーできます。

于 2013-03-20T20:24:33.187 に答える
1

A と B が同じ構造体を指すようにするだけです。たとえば、アドレス 0x1000 にある構造体用に malloc() を呼び出して領域を予約したとします (単なる例です)。

これで、malloc() の後、B は数値 0x1000 を保持するだけです。したがって、A = B を実行すると、A も 0x1000 に設定されます。そうすれば、B->var1 は A->var1 とまったく同じエンティティになります。

于 2013-03-20T20:26:36.670 に答える
1

はい... A と B はポインターであり、値ではありません。A = B と言うときは、「ポインター A を、B が指しているのと同じものを指すように設定する」ということです。より具体的には、A と B の両方に、割り当て後に同じメモリ アドレスが含まれます。

A->someVar を使用するときに実際に行っていること

{someVar のアドレス} = {構造体のメモリ アドレス} + {構造体の先頭からのバイト単位の someVar のオフセット}

于 2013-03-20T20:27:00.920 に答える
0

はい、次のコード:

struct example* A;
struct example* B;
B = malloc(sizeof(struct example));
A = B;

A同じメモリを指すようになりBます。ただし、ポインタ自体の値()を変更してBも、他のポインタ(A)には影響しないことに注意してください。たとえば、次の場合に実行します。

free(B);
B = NULL;

ポインタは、のインスタンスが存在していAたメモリを引き続き指しているため、無効な(ダングリング)ポインタになります。struct exampleA

于 2013-03-20T20:27:58.573 に答える
0

ポインターはメモリ内のデータのアドレスを保存し、mallocreturn の呼び出しは、データに割り当てたメモリ領域が始まる最初のワードのアドレスを返します。

建物の番号を書き留める紙のようなポインターを想像することができます。ポインターを入力すると、アパートの魔女にも番号が付けられていることがわかります。

したがって、ポインターの値を別のポインターに代入することは、別の紙に最初の紙の数字を書き込むようなものです。

内部のプリミティブ データ型および/またはその他のポインターstructは、アパートと同じように、具体的なものを表示したり、他のものを見つけることができる他のエリアに入ることができます。

于 2013-03-20T20:34:30.943 に答える