問題タブ [pointer-arithmetic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - printfの動作
私int ptr={10,20,30,40,50}
はそれを理解します
このようなステートメントでは、演算子の評価は右から左に行われます。したがって、*ptr++
最初++
に評価され、次に評価さptr
れ*
ます。同じことを確認するために、プログラムを作成しました。
上記のプログラムの出力は、上記のロジックによって予想される演算子の優先順位とは異なります。私が得た出力は
しかし、私は期待していました
では、演算子の優先順位は右から左に発生しませんでしたか?それとも私の理解に何か問題がありますか?
アップデート
*(ptr ++)が実行されるようにこれらの括弧を前述のように配置しても、出力はここでは変更されません。新しいコードです。
結果は、あなたが言及したのと同じ中括弧の使用に注意してください。それでも出力は
したがって、中括弧*(ptr ++)を使用した後でも、現在の行が実行された後も操作++が実行されていました。中括弧()は機能しませんでしたか?それとも、ポストインクリメントのものよりも優先権が与えられていませんでしたか?
c++ - メディア バッファーからの読み取り - ポインター演算 C++ 構文
これは前に出てきたかもしれませんが、次のコードは、私が変更している MSDN の例から取られています。ビットマップに関するデータを含むバッファーの内容を反復処理して、色を出力する方法を知りたいです。各ピクセルは 4 バイトのデータであるため、RGB 値がこれらのバイトのうちの 3 つを占め、おそらく A が 4 番目であると想定しています。
その反復中にポイントされた値を、使用できるローカル変数に格納する、必要なポインター演算 (理想的にはループ内) の正しい C++ 構文は何ですか? コンソールに出力します。
どうもありがとう
PS。これは安全ですか?または、IMFMediaBuffer の内容をより安全に読み取る方法はありますか? 代替案が見つかりませんでした。
コードは次のとおりです。
c++ - C++ ポインター演算の奇妙さ
(数時間後に) バグを見つけ、次のプログラムでそれを分離しました。問題は、構造体へのポインタを使用する場合の pst2 変数の値の計算方法にあります。char へのポインターを使用する場合、すべて正常に動作します。どうしてこれなの?
(gcc/g++ バージョンを使用: (Debian 4.4.5-8) 4.4.5)
(疑問に思っている人のために: 通常のオフセットでデータ グループを含むファイル バッファーにアクセスしています。)
出力:
c++ - nullターミネータを使用したポインタと配列の相互作用
配列を処理するときにポインターの使用を実験していたところ、C++が配列を処理する方法に少し混乱しました。これが私が書いたコードの関連する部分です:
まず、coutを使用して「pszString」にあるものを(参照を解除せずに)書き込もうとしたとき、文字列が表示されるのを見て少し驚きました。ポインタに変数ではなく文字列を指定したためだと思いました。
しかし、本当に私の注意を引いたのは、行からアスタリスクを削除すると、cout << *pszString++;
「Randyandyndydyy」と印刷されたことです。なぜ配列を書き込んだ後、1文字少なくして再度書き込むのかわかりません。私の推論は、char文字列を書き込んだ後、インクリメント演算子は、nullターミネータに到達する前に、インデックスをすぐに次の文字に移動するというものです。文字列が初めて出力された後、nullターミネータがループにfalseを返さない理由がわかりません。これは正しい理由ですか?配列とポインタの間にこの関係があるかどうか誰かが説明できますか?
c - なぜ i[arr] はより大きなデータ型を持つ C で arr[i] と同様に機能するのですか?
arr[i]
C のように配列の要素にアクセスする場合、要素に としてアクセスすることもできるというのはかなり一般的な知識i[arr]
です*(arr + i)
。私の質問は、なぜこれがより大きいデータ型で機能するのかというchar
ことsizeof(char)
です.1であるためです.私にとっては、ポインタを1文字だけ進める必要があります.
おそらく、この例はそれをより明確にします:
では、なぜ配列ポインタに 1 を追加すると だけ進むのsizeof( struct large )
でしょうか?
c - cプログラムの説明が必要
私が購入したc-bookでは、運動プログラムは次のように与えられています。
次のコードスニペットの出力は何ですか?
私が得た答えは私です(TC ++で実行することによって)
しかし、実際のメカニズムを理解することはできません。その背後にある実際のメカニズムを説明してください。
c - 構造体のポインタ演算
1つのdouble変数と3つのint変数(全部で4つの変数)を含む構造体定義が与えられた場合、pが値0x1000のこの構造体へのポインターである場合、p ++にはどのような値がありますか?
これは宿題の問題ではないので、心配しないでください。テストの準備をしているだけで、この練習問題を理解できません。ありがとう
これはCです。はい、増分した後のpの値が必要です。これは32ビットマシンです
pointers - ポインターへのポインターなどのポインター演算
ポインターへのポインターでポインター演算を使用することは明確に定義されていますか? 例えば
p2 で算術演算を実行することは、明確に定義された動作でしょうか? (例: p2+1、p2+2 など)
c - メモリ バッファからの構造体の int の設定
表面的な質問がもっとあります:
サンプルで「cur_ptr」として使用するメモリ ストリーム (void *) があります。ここで、最初のバイトを構造体 (「a_struct」) の int (「バージョン」) に読み込みたいと考えています。動作する私のコード:
ヘルプポインター*バージョンなしでどのように書くことができますか?
それは機能しません:
何か案は?
ありがとう
c - 多次元配列のC奇妙な配列構文
私はこれが真実であることを知っています:
多次元配列に相当するものは何ですか?次は本当ですか?