[解決済み] ポインタのアドレスとポインタの値をインクリメントするには?
2022-08-31 14:03:25
質問
仮定してみましょう。
int *p;
int a = 100;
p = &a;
次のコードは実際に何をどのように行うのでしょうか?
p++;
++p;
++*p;
++(*p);
++*(p);
*p++;
(*p)++;
*(p)++;
*++p;
*(++p);
なんだかコーディングが雑になってしまいましたが、このようにコーディングすると実際にどうなるのか知りたいのです。
注:ここでは
a=5120300
のアドレスは、ポインタ
p
であり、そのアドレスは
3560200
. の値はどうなるのでしょうか?
p & a
の値はどうなるでしょうか?
どのように解決するのですか?
まず、++演算子は*演算子より優先され、()演算子はそれ以外より優先されます。
次に、++number演算子は、何かに代入していないのであればnumber++演算子と同じです。違いは、number++はnumberを返してからnumberをインクリメントし、++numberは先にインクリメントしてからそれを返します。
第三に、ポインタの値を増加させることは、その内容のサイズだけ増加させることであり、つまり、配列で反復するように増加させることである。
というわけで、すべてをまとめると
ptr++; // Pointer moves to the next int position (as if it was an array)
++ptr; // Pointer moves to the next int position (as if it was an array)
++*ptr; // The value pointed at by ptr is incremented
++(*ptr); // The value pointed at by ptr is incremented
++*(ptr); // The value pointed at by ptr is incremented
*ptr++; // Pointer moves to the next int position (as if it was an array). But returns the old content
(*ptr)++; // The value pointed at by ptr is incremented
*(ptr)++; // Pointer moves to the next int position (as if it was an array). But returns the old content
*++ptr; // Pointer moves to the next int position, and then get's accessed, with your code, segfault
*(++ptr); // Pointer moves to the next int position, and then get's accessed, with your code, segfault
ここにはたくさんの事例があるので、何か間違いがあるかもしれません、間違っていたら訂正してください。
EDITです。
というわけで、私の勘違いでした。優先順位は私が書いたものよりもう少し複雑なので、こちらをご覧ください。 http://en.cppreference.com/w/cpp/language/operator_precedence
関連
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
Cエラー [エラー] 代入_Ashesの左オペランドにlvalueが必要です-プログラマーズ・シークレット
-
C++の配列コピー
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み】なぜこれらのコンストラクトはプリインクリメントとポストインクリメントを使用して未定義の動作をしているのでしょうか?
-
[解決済み】ベースポインタとスタックポインタとは一体何でしょうか?これらは何を指しているのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
[解決済み] Windows用Cコンパイラ?[クローズド]
-
[解決済み] C 言語で const char* を char* に変換するには?
-
[解決済み] c または c++ 用のシンプルな 2 次元クロスプラットフォームグラフィックスライブラリ?[クローズド]
-
[解決済み] C言語で関数型プログラミングを行うためのツールにはどのようなものがありますか?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] 講師が書いたC言語のファイルは、なぜ最初の行に#が一つ付いているのですか?