問題タブ [pass-by-pointer]
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++ - ポインターのサイズと参照渡しとポインター渡し
2 つの質問があります。
4 ビット システムでは、ポインターは 4 バイトであるというのは正しいですか?
「参照渡し」と「ポインタ渡し」は同じもので、言葉遣いが違うだけですか?
visual-c++ - このプログラムでポインター変数とポインターベースの参照渡しを使用しないようにするにはどうすればよいですか?
このプログラムでポインター変数とポインターベースの参照渡しを使用しないようにするにはどうすればよいですか? 私のインストラクターが言ったように、ポインターを使用する必要はありません。これはカメとウサギのシミュレーターです。番号生成を使用して、この記憶に残るイベントのシミュレーションを開発します。
pass-by-reference - 値渡し時の変数変更
double を宣言する main 関数があります。次に、これを void Display に渡し、double を表示します。main は次に double を (値で) 関数 void Pointers に渡します。この関数は display 関数を呼び出し、double の値を変更します。次に、メイン内から再び表示関数を実行し、再び double を渡します。しかし、double が新しい値 (Pointers() で変更した値) に変更されており、その理由がわかりません。
私が理解しているように、値渡しすると、関数にコピーを渡し、そのコピーに対して何でもできますが、元のバージョンは変更されません。参照渡しの場合は、アドレスを元のデータに渡すだけです。
値で渡したので、独自のコピーを変更してオリジナルをそのままにしておくべきではありませんか?
参考までに以下のコード。
これは割り当てです(ステップ5でダブルとポインターを渡す方法が具体的に示されているため、投稿します)
1 を作成するプログラムを作成
します。名前、クラス番号、および日付を表示する見出し関数を作成します。
2. メインで
• 見出し関数を呼び出す
• double を作成し、それに値を割り当てる
• double を指すポインタを作成する
3. 文字列、ポインタ、および double を取り、cout ステートメントを使用して表示内容を説明するテキストを表示し、それぞれを順番に表示します: 表示元
の場所 (メインまたはメソッドから呼び出されますか?)
double アドレス
double 値
ポインター アドレス
ポインター値 (ポインターはアドレスを保持します。これは double のアドレスである必要があります)
逆参照されたポインター値 (ポインターが指しているもの、double 値)
4. main から表示関数を呼び出して、ポインターと double の属性を表示します。 .
5. main からポインターと double を受け取る (double を値で渡す) void 戻り型を持つ関数を作成します。次に、main で行ったように、ポインターと double の値を表示します。
• double の値を変更し、ポイントに double の値を割り当てます (*pointer = double)
• ptr がポイント名で x が double の名前の場合、*ptr = x;
6. メインに戻り、ポインターと double の属性を再表示します。
7. 一時停止を追加します。
8. 次の 1 つの質問に答えてください
。 • 見出し関数を呼び出します
。 • 次の質問とその答えを表示します。
「関数に double を値で渡す場合、関数から戻った後にメインで double の値が変わるのはなぜですか?」
copy-constructor - ポインターによる C++ コピー コンストラクター
こんにちは、ポインターである新しいクラス変数を作成し、コピー コンストラクターで初期化したいと考えています。コピーコンストラクターが参照によってどのように機能するかは知っていますが、その方法がわかりません。手伝って頂けますか?たとえば、次の定義があります。
そして別のコードセグメントで私は次のことを行います:
しかし、セグメンテーション違反が発生します。手伝って頂けますか?私も試しました:
しかし、それも機能しません。
c - リンクされたリストの値を印刷するにはどうすればよいですか?
私は 1 日の大半を、連結リストを使った簡単なプログラムを書こうとしてきました。私の主な問題は、私がアクセスしているメモリが私が思っているものではない理由を理解していないようです。私はprintfに夢中で、可能な限りすべての形式のデータを出力していますが、それが機能しない理由を理解するのにまだ苦労しています。
たとえば、&head
を取る関数にを渡し、内部の値(したがって) が であるnode **location
かどうかを確認したい場合、 を使用する必要があるか、 を使用する必要があるか、後者が正しいようですが、なぜですか?location
head
NULL
if(!*location) return;
if(!location) return;
node *current
また、物事を追跡するために関数内に を作成したい場合は、 node* current = *head
orから始めるべきですか?node* current = head
そして、最も重要なのはなぜですか? 後者の方が良いことに気づきましたが、まだ意味がわかりません。ステートメントを型キャストすると警告は消えますが、何も修正されないようです。
ここに私が書いているいくつかの関数があります。コードのどこが意味を成していないかについてのヒントを教えてください。できれば、出力がメモリの場所のように見えて、不良メモリにアクセスしている理由を理解したいと思っています。
c++ - C ++の出力パラメーターとしての配列
エラー コード ( ErrCode
enum ) を返し、2 つの出力パラメーターを渡す関数を作成しました。しかし、関数の結果を出力すると、配列に正しい値が得られません。
getTrimmedList
関数は次のようになります。
どこ:
foo
オブジェクトの配列を保持するFooBar
オブジェクトですfoo.getListCount()
タイプを持つオブジェクトの数を返しますFOO_TYPE_1
FOO_TYPE_1
取得/リストしたいオブジェクトのタイプですfoo.getEntryByIndex()
i
type のthFooBar
オブジェクトを返しますFOO_TYPE_1
bar.isDeleted
bar
が「削除済み」と見なされるかどうかを示すフラグです
私のエラーは何ですか?
編集:
すみません、間違った行をコピーしました。上でコメントして、正しい行を入れました。
編集 2
foo
とのリターンを制御することはできませんbar
。それらの関数の戻り値はすべてErrCode
、出力はパラメーターを介して渡されます。
c++ - 常に参照渡しは悪い習慣ですか?
まず、ここで私の質問を明確にしたいと思います。コーディングの開発中に、これらの組み込み型を除いて、自分のクラス メンバー関数で参照渡しをしていることに気付きました。しかし、なぜポインタを使用して引数を渡さないのか (ポインタによる受け渡し) を頭の中で考えています。
ポインターではなく参照渡しするのは悪い習慣ですか?
pointers - ポインタを静的構造体オブジェクトに渡す
ポインターを別の関数に渡し、その中のポインターで変更することにより、静的構造体オブジェクトを変更しようとしています。ただし、変更関数の実行後でも、構造体の値はそのままです。
また、このコードで gdb を実行すると、コード フローが modifier_function_b() 関数に入るとすぐに、gdb が変数 ptr の 2 つのエントリ (ptr と ptr@entry) を報告することがわかります。すべての変更は ptr で行われますが、obj の実際の場所を指す ptr@entry は変更されません。誰かがここで何が起こっているのか指摘できますか? 静的変数へのポインターは const ポインターのようなもので、スコープ外で変更することはできませんか?
もう1つ...静的修飾子を削除すると、この動作は見られないため、静的へのポインターはconstポインターのようなものだと思いました。
前もって感謝します :)
c++ - ダブルポインターを使用して構造体のメンバーに値を代入する
構造体への二重ポインターを取り、値を割り当てる関数があります。しかし、メンバーにアクセスしようとすると、「アクセス違反の書き込み場所...」が表示されますmember1
。これは私のコードです: