*ptr+、*++ptr、++*ptrおよび(*ptr)++
1066 ワード
*++ptr、+*ptr、*ptr+、(*ptr)++
int num[] ={1,3,5,7,9}; int* ptr_num = num;
まず*++ptrを見て、これは簡単にポインタシフトアドレスに1を加えて、それから値を取る結果は3であるべきです
それから++*ptr、先に引用を解いてから++して、結果は2で、つまり元の配列の最初の値に1を加えます
面倒なことに、後++は、まず*ptr++、*と++の優先度が同じで、単目演算子は右から左になるべきですが、ここで正しい実行手順は、ポインタが指す値を参照して取り出し、次にポインタアドレスを1加算して次の位置を指します.したがって、値シフトは配列内の値を変更しません.*(p++)でも結果は*p++と同様であり,主に後加算操作の影響によるものである.
最後の(*ptr)++は、参照を解いて値を1加算します.
出力結果は1,2であり、説明(*ptr)++はnum[0]の値を修正するが、後++は実行が完了した後に++を実行するので*ptr_numの値を先に印刷し、さらにプラス1の操作を実行するので、&ptr_numは1を印刷する.
反復ループで値を取るときは*ptr++を使いますが、元の値の大きさは変わりません.*++ptrは最初の値をスキップするので、*ptr++を使うといいです.
面倒すぎると変数iを定義し、ptr+iはどうしても間違っていません.
int num[] ={1,3,5,7,9}; int* ptr_num = num;
まず*++ptrを見て、これは簡単にポインタシフトアドレスに1を加えて、それから値を取る結果は3であるべきです
int num[] ={1,3,5,7,9};
int* ptr_num = num;
cout << *++ptr_num << endl;
// 3
それから++*ptr、先に引用を解いてから++して、結果は2で、つまり元の配列の最初の値に1を加えます
int num[] ={1,3,5,7,9};
int* ptr_num = num;
cout << *++ptr_num << endl;
// 2
面倒なことに、後++は、まず*ptr++、*と++の優先度が同じで、単目演算子は右から左になるべきですが、ここで正しい実行手順は、ポインタが指す値を参照して取り出し、次にポインタアドレスを1加算して次の位置を指します.したがって、値シフトは配列内の値を変更しません.*(p++)でも結果は*p++と同様であり,主に後加算操作の影響によるものである.
int num[] ={1,3,5,7,9};
int* ptr_num = num;
cout<
最後の(*ptr)++は、参照を解いて値を1加算します.
int num[] ={1,3,5,7,9};
int* ptr_num = num;
cout<
出力結果は1,2であり、説明(*ptr)++はnum[0]の値を修正するが、後++は実行が完了した後に++を実行するので*ptr_numの値を先に印刷し、さらにプラス1の操作を実行するので、&ptr_numは1を印刷する.
反復ループで値を取るときは*ptr++を使いますが、元の値の大きさは変わりません.*++ptrは最初の値をスキップするので、*ptr++を使うといいです.
面倒すぎると変数iを定義し、ptr+iはどうしても間違っていません.