ポインタを指す値のアドレスをポインタに代入する方法があるかどうかを知りたかったのです。例えば、通常の方法があります:ポインタにアドレスを割り当てる
は私が見るいくつかの場所で、それは次のように宣言:
int *ptr = &a;
は、これらの方法の両方が同等か?私はいつも* ptrがアドレスではなくの値であるを与えていると考えていたので、ちょっと混乱しています。誰か説明してもらえますか?ありがとう。
ポインタを指す値のアドレスをポインタに代入する方法があるかどうかを知りたかったのです。例えば、通常の方法があります:ポインタにアドレスを割り当てる
は私が見るいくつかの場所で、それは次のように宣言:
int *ptr = &a;
は、これらの方法の両方が同等か?私はいつも* ptrがアドレスではなくの値であるを与えていると考えていたので、ちょっと混乱しています。誰か説明してもらえますか?ありがとう。
私は常にアドレスを
a
の値を与え、そしてないよう*ptr
考えられたので、私は少し混乱しています。
*
は、ポインタを宣言するために使用され、逆参照演算子としても使用されるため、実際はちょっと混乱しています。 *
の実際の意味は、宣言、初期化、または割り当てに使用されているかどうかによって、コンテキストに依存します。
1)宣言、2)初期化、3)割り当ての違いを知ることは価値があります。 1で
int *ptr; // 1) this is declaration without initialisation.
int *ptr = &a; // 2) this is declaration **and** initialisation (initialise ptr to the address of variable a)
int b = 10;
*ptr = b; // 3) this is assignment, assign what pointed by ptr to value of variable b.
*
)はptr
がint
へのポインタである(しかし、それはまだ有効な位置を指摘していないことを意味します。*
は、ptr
がint
へのポインタであり、その初期値が変数a
のアドレスであることを意味します。*
は、逆参照演算子です。すなわち、ptr
が指すものを変数b
の値に代入します。答えをありがとう!私はそれが今多くのことを理解しています:) – QPTR
いいえ、1行で宣言とintiliationです。
これはアイデアがクリアされます。..
typedef int* intp;
intp ptr=&a;
同等
intp ptr; //int *ptr;
ptr=&a; // ptr=&a;
答えは:YES、彼らは同じです。
あなたは ask-可能性があります - ?どのようにコンパイラが理解しないと(間接または宣言のようである*か)
回答: - Cは、それがされている状況にsensitive..basedコンテキストです使用されたコンパイラがそれを決定します。
ありがとうございました! :) – QPTR
それは大丈夫です... @ QPTR .: – coderredoc
int *ptr; ptr = &a;
は、int *ptr = &a;
であり、int n; n = 3;
は、int n = 3;
である。
つまり、ポインタの宣言と初期化は通常の変数と変わりありません。可能であれば、初期化されていない変数を持つ危険性がより低いので、私は1行を使用することを好みます。
ありがとう! 1ライナーを使用するのが少し危険だとわかったので、そのアプローチをもっと使用しようとします。 – QPTR
宣言時に*
演算子が使用されている場合は、宣言されている変数の型を示すために使用されています。他のすべてのケースでは、*
演算子が逆参照演算子として使用されます(ただし、乗算演算子として使用される場合を除く)。
だからint *ptr = &a
はptr
が&a
を割り当てられ*ptr = a
はa
を割り当てられているvariable stored at address ptr
(ptr
をデリファレンス)を意味されているタイプint *
の変数であることを意味します。
答えをありがとう! – QPTR
これらの方法はどちらも同じですか?
はい。
2番目の方がほんのわずかですが、最後の行までptr
が割り当てられません(実際にはコンパイラはおそらくそれを最適化します)。
私はいつも* ptrがアドレスではなく値を与えると考えていたので、少し混乱しています。
変数を宣言する構文を、その変数を使用する構文と混同しています。
int *ptr;
は、整数へのポインタであるptr
という変数を宣言します。
int *ptr = &a;
は全く同じです。最初の部分は、以前と同じようにポインタの宣言だけです。等号の後の部分は、あなたが宣言した後、後でこの場合には(あなたのa
の値をポインタの内容を与える*ptr
を指定して、後続のコードで、この変数を使用するときにことを正しいa
のアドレスにptr
を初期化する署名します)。
両方が同じだけです – kapil
'int * ptr;'を書くときは、ポインタを宣言します。 * ptrを書くときは、値を割り当てます。 *演算子の意味を変更するdéclaration – loginn
'int a = 10、* ptr =&a;' :)と書くこともできます。同じものです –