int main ()
{
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
........
これは、Web サイトの c++ マニュアルのポインター セクションからのものです。道に迷いました。
p
配列への参照の場合、4 行目で増加しているのは何ですか? それとも配列を指していnumbers
ますか?
配列内の値を再割り当てするよりも、これが優れているのはいつでしょうか?
これが私の考えです。間違っていたら訂正してください。
int *p;
p がどうあるべきかを決定します - 整数ポインタ、つまり、メモリアドレスの場所を格納する変数 (参照する場合、整数値以外は期待されません)
p = numbers;
前の行ですでに宣言されている p が何であるかを決定しません。
変数 p (つまり、p に割り当てられたメモリ) に numbers の「右辺値」を割り当てるだけです。つまり、number 配列の最初の項目への実際のメモリ アドレスである number 計算値。
p
共通点はありnumber
ませんが、同じ値 (メモリアドレス) を持っていることだけです。
は整数を指し、配列を指しているため、c++ では別の方法で処理されますp
。sizeof を実行すると、整数と配列の sizeof が return として取得されます。number
p
number
C++ では、配列は一種のポインターであり、配列の最初の値を指します。構文numbers[2]
は と同じ意味*(numbers+2)
です。ポインタnumbers
を にコピーすると、配列の最初の値 も指すようになりp
ます。でインクリメントすると、配列の 2 番目の値を指すようになります。p
numbers[0]
p++
numbers[1]
*p = 10;
コマンドおよびを実行すると、 が指す値が 10 および 20 に等しく*p = 20;
設定されます。p
これらはそれぞれnumbers[0]
とnumbers[1]
です。