ポインタでプレフィックスとポストフィックスを一緒に使用すると奇妙な出力

SimaGuanxing

以下のコードを考えると

char buf[] = "asfsf";

char *a=buf;
++*a++;
cout<<*a;

結果は「s」の次の文字である「t」になると思いますが、結果は「s」のままです。どうして?

++ * a ++がと同じではない理由

*a++;
++*a;
cout<<*a;

それは本当に++ i ++と重複する質問ですか?++ i ++は未定義の動作であり、コンパイルエラーが発生することはわかっていますが、++ * i ++は実際に実行できます。私の場合も未定義の振る舞いですか?

ジェリー・コフィン

現在のところ、文字列リテラルの内容を変更しようとするため、コードの動作は未定義です。

コンパイラがそのようなコードを受け入れないようにする1つの方法(おそらく好ましい方法)は、次のaように定義することです。

char const *a="asfsf";

このように、++*aパーツは単にコンパイルされません。

説明のために、コードを少し変更して次のようにします。

#include <iostream>

int main(){ 

    char x[]="asfsf";
    char *a = x;
    ++*a++;
    std::cout<<x;
}

これaで、実際に書き込むことができるメモリをポイントし、意味のある結果を得ることができます。これは印刷されbsfsfます。印刷するとa、が表示されますsfsf

何が起こっているのかというとそれa++インクリメントしますが、それでも元の値を生成しますこれは逆参照され、の最初の要素への参照を提供します次に、プリインクリメントがそれに適用され、から変更されます。aaxab

ポインタをインクリメントし、結果を逆参照してからインクリメントする場合は、次を使用します++*++a;ええと、いいえ、あなたはそれを使わないでしょう-あるいは少なくとも私はあなたが使わないことを望みます。a配列の2番目の要素を指すようにインクリメントし、次にその2番目の要素をインクリメントしてからs変更します。tただし、コードを読んだ人は、そのように書くのが嫌なら、完全に許されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Fiddlerの出力に不明なプレフィックスとポストフィックスがあります

分類Dev

テンプレートフィルターと一緒にフラスコスクリプトを使用する

分類Dev

include_HEADERSでautotoolsのnobaseプレフィックスとnodistプレフィックスを一緒に使用する方法

分類Dev

C:使用エラー:「複合代入」と「プレフィックスデクリメント」を一緒に使用

分類Dev

スレッドのサブクラスのオブジェクトをインスタンス化するために継承とポリモーフィズムを使用することの主な違いは何ですか?

分類Dev

スレッドのサブクラスのオブジェクトをインスタンス化するために継承とポリモーフィズムを使用することの主な違いは何ですか?

分類Dev

オブジェクトポインタプレフィックスが値に追加されるのはなぜですか?(スウィフト4)

分類Dev

C ++コンパイラはプレフィックスとポストフィックスのoperator ++()をどのように拡張しますか?

分類Dev

アダプタクラスとアクティビティでインターフェイスを一緒に使用する方法

分類Dev

Cocoapodの「ポッドインストール」はプレフィックスヘッダーで奇妙な動作をします

分類Dev

forループのプレフィックスとポストフィックス

分類Dev

宛先ポートに基づいて異なるインターフェイスでトラフィックを出力します

分類Dev

ポリモーフィックコンテナから既知のインターフェイスを抽出するときの奇妙な動作

分類Dev

リクエストとレスポンスのタイプフィールドを回避する方法@jsoninfotype

分類Dev

インポートされたディレクティブの1つに「プレフィックスとして」を使用するか、インポートの1つを除くすべてから名前を非表示にしてみてください

分類Dev

入力トラフィックによって生成された出力トラフィックを、入力トラフィックとは異なるインターフェイスにルーティングできますか?

分類Dev

プレフィックス、インフィックス、ポストフィックスの式を検証するための正規表現

分類Dev

Javaは問題を '(アポストロフィ/一重引用符)と\(バックスラッシュ)で一緒に置き換えます

分類Dev

SecureRandom文字列列にインデックスを付けるときに使用するプレフィックス

分類Dev

プログラムパスは、大文字と小文字が異なる文字をディスク上のファイルとして使用します。これにより、ブレークポイントがヒットしない可能性があります

分類Dev

Javaは、干渉することなくポートでトラフィックをリッスンする方法

分類Dev

フローティングアクションボタン、スワイプリフレッシュレイアウトとコーディネーターレイアウト、およびツールバーレイアウト動作を一緒に使用する

分類Dev

インポートで.srcプレフィックスをディスペンスするSrcレイアウト?開発インストールのためにPyCharmターミナルでvenvをアクティブ化する

分類Dev

Jira Plan Board:ラベルでフィルタリングするとエピックとストーリーポイントが非表示になります

分類Dev

styledを使用するマテリアルUIは、タイプスクリプトのタイポグラフィにコンポーネントプロップを渡すことができません

分類Dev

ポイントタイプでPHPUnit / CakePHPフィクスチャを使用する

分類Dev

さまざまな個別のポリゴンの外側にあるリーフレットマップをマスクするときの奇妙な動作

分類Dev

クラスタイプの代わりにインターフェイスタイプから宣言することは、ポリモーフィックまたはより一般的ではないようです

分類Dev

誘導の再帰的ステップ内でフィックスポイントの「展開」を使用する

Related 関連記事

  1. 1

    Fiddlerの出力に不明なプレフィックスとポストフィックスがあります

  2. 2

    テンプレートフィルターと一緒にフラスコスクリプトを使用する

  3. 3

    include_HEADERSでautotoolsのnobaseプレフィックスとnodistプレフィックスを一緒に使用する方法

  4. 4

    C:使用エラー:「複合代入」と「プレフィックスデクリメント」を一緒に使用

  5. 5

    スレッドのサブクラスのオブジェクトをインスタンス化するために継承とポリモーフィズムを使用することの主な違いは何ですか?

  6. 6

    スレッドのサブクラスのオブジェクトをインスタンス化するために継承とポリモーフィズムを使用することの主な違いは何ですか?

  7. 7

    オブジェクトポインタプレフィックスが値に追加されるのはなぜですか?(スウィフト4)

  8. 8

    C ++コンパイラはプレフィックスとポストフィックスのoperator ++()をどのように拡張しますか?

  9. 9

    アダプタクラスとアクティビティでインターフェイスを一緒に使用する方法

  10. 10

    Cocoapodの「ポッドインストール」はプレフィックスヘッダーで奇妙な動作をします

  11. 11

    forループのプレフィックスとポストフィックス

  12. 12

    宛先ポートに基づいて異なるインターフェイスでトラフィックを出力します

  13. 13

    ポリモーフィックコンテナから既知のインターフェイスを抽出するときの奇妙な動作

  14. 14

    リクエストとレスポンスのタイプフィールドを回避する方法@jsoninfotype

  15. 15

    インポートされたディレクティブの1つに「プレフィックスとして」を使用するか、インポートの1つを除くすべてから名前を非表示にしてみてください

  16. 16

    入力トラフィックによって生成された出力トラフィックを、入力トラフィックとは異なるインターフェイスにルーティングできますか?

  17. 17

    プレフィックス、インフィックス、ポストフィックスの式を検証するための正規表現

  18. 18

    Javaは問題を '(アポストロフィ/一重引用符)と\(バックスラッシュ)で一緒に置き換えます

  19. 19

    SecureRandom文字列列にインデックスを付けるときに使用するプレフィックス

  20. 20

    プログラムパスは、大文字と小文字が異なる文字をディスク上のファイルとして使用します。これにより、ブレークポイントがヒットしない可能性があります

  21. 21

    Javaは、干渉することなくポートでトラフィックをリッスンする方法

  22. 22

    フローティングアクションボタン、スワイプリフレッシュレイアウトとコーディネーターレイアウト、およびツールバーレイアウト動作を一緒に使用する

  23. 23

    インポートで.srcプレフィックスをディスペンスするSrcレイアウト?開発インストールのためにPyCharmターミナルでvenvをアクティブ化する

  24. 24

    Jira Plan Board:ラベルでフィルタリングするとエピックとストーリーポイントが非表示になります

  25. 25

    styledを使用するマテリアルUIは、タイプスクリプトのタイポグラフィにコンポーネントプロップを渡すことができません

  26. 26

    ポイントタイプでPHPUnit / CakePHPフィクスチャを使用する

  27. 27

    さまざまな個別のポリゴンの外側にあるリーフレットマップをマスクするときの奇妙な動作

  28. 28

    クラスタイプの代わりにインターフェイスタイプから宣言することは、ポリモーフィックまたはより一般的ではないようです

  29. 29

    誘導の再帰的ステップ内でフィックスポイントの「展開」を使用する

ホットタグ

アーカイブ