問題タブ [pointers]

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.

0 投票する
1 に答える
3731 参照

c++ - C++ でポインターを extern として宣言できますか?

コンパイルされない次のレガシー C++ コードがあります。

GCC (g++) が不平を言う:「'*' トークンの前に初期化子が必要です」

周りを見回すと、次のようにこれらを外部参照として宣言するのがより一般的です。

ポインターが有効ではないのに、参照がこの状況にあるのはなぜですか?

解決:

後述するように、本当の問題は std:: 名前空間指定子が欠落していることです。どうやら、これは古い C++ コードでは一般的でした。

0 投票する
5 に答える
5561 参照

pointers - 参照とポインタの実行速度

私は最近、マネージ言語がネイティブ言語よりも遅い (または速い) かどうか (具体的には C# と C++) に関する議論を読みました。議論に貢献したある人は、マネージ言語の JIT コンパイラーは、ポインターを使用する言語では不可能な参照に関する最適化を行うことができると述べました。

私が知りたいのは、ポインターではなく参照で可能な最適化の種類は何ですか?

議論はメモリ使用量ではなく、実行速度に関するものであることに注意してください。

0 投票する
8 に答える
4018 参照

c++ - stdin を使用した C++ char 配列

標準入力によって設定された配列のサイズを取得しようとしています:

これは、「40905898」など、長さが 4 より大きい文字列を入力すると 4 を返します。

どこが間違っているのですか?

0 投票する
5 に答える
951 参照

c++ - C++ のポインター型のポイントは何ですか?

と呼ばれるいくつかのポインタがあるとしましょう:

どちらも他の場所を指すメモリアドレスを保持するだけであり、型は特定のポインタが指すメモリの場所の大きさを宣言することを知っています。たとえば、char はシステム上の 1 バイトのサイズであり、int は 4 バイトである可能性があります。

しかし、私がこれを行うとどうなりますか:

ありがとう..ここで説明をいただければ幸いです..ポインタ型は単に ++ 操作のためですか?

編集: avp は私の質問に適切に答えましたが、フォローアップの質問があります。

2バイトコピーしますか?または4バイト?アクセス違反になりますか?

編集: Ryan Fox によると、答えは (void*) に型キャストされているため、2 バイトです。ありがとう!閉まっている!

編集:将来の検索者がこれを見つけることができるように..私が発見した別の情報..

pInt+5bytelocations が指すメモリ ブロックの 2 バイトを pChar+5bytelocations にコピーしません。2 バイトが pInt(4*5)bytelocations から pChar+5bytelocations にコピーされます。アクセス違反が発生したのも不思議ではありません。読んではいけないところを読もうとしていた.. :)

0 投票する
19 に答える
112967 参照

c - 配列の場合、なぜ a[5] == 5[a] になるのですか?

Joel がStack Overflow ポッドキャスト #34で指摘しているように、C プログラミング言語(別名: K & R) では、C の配列のこのプロパティについて言及されています。a[5] == 5[a]

ジョエルはポインタ演算が原因だと言っていますが、私にはまだわかりません。なぜa[5] == 5[a]ですか?

0 投票する
8 に答える
16032 参照

c++ - C++ でのポインターの定義を確認する

変数、特にポインターが C++ で定義されているかどうかを確認するにはどうすればよいですか? クラスがあるとします:

0 投票する
8 に答える
4824 参照

c++ - スマートポインタ+「これ」は有害と見なされますか?

などのスマート ポインターを使用する C++ プロジェクトでboost::shared_ptr、" " の使用に関する優れた設計哲学は何thisですか?

次のことを考慮してください。

  • スマート ポインターに含まれる生のポインターを後で使用するために保存するのは危険です。オブジェクトの削除の制御をあきらめ、スマート ポインターが適切なタイミングでそれを実行することを信頼します。

  • 非静的クラス メンバーは、本質的にthisポインターを使用します。これは生のポインターであり、変更することはできません。

別の変数に保存thisしたり、後で保存したり、コールバックでバインドしたりする可能性のある別の関数に渡すと、誰かがクラスへの共有ポインターを作成することを決定したときに導入されるバグが作成されます。

thisそれを考えると、ポインタを明示的に使用することが適切なのはいつですか? これに関連するバグを防ぐことができる設計パラダイムはありますか?

0 投票する
1 に答える
2986 参照

python - Python の ctypes を使用して、「struct_name *** param_name」として宣言されたパラメーターを渡したり読み取ったりしますか?

Python の ctypes ライブラリを使用して、スキャン ライブラリSANEのいくつかのメソッドにアクセスしようとしています。これは ctypes の私の最初の経験であり、1 年以上にわたって C データ型を扱わなければならなかったのは初めてなので、ここにはかなりの学習曲線がありますが、この特定の宣言がなくても、この特定の宣言は面倒だと思います:

まず、SANE_Status(enum) とSANE_Bool(typedef to c_int) の処理に成功しました。どちらもシンプルでした。一方、その最初のパラメーターは、私にあらゆる種類の悲しみを引き起こしています. そもそも" " 表記に慣れていない***ため、これまでのトレーサー弾はガベージ データしか生成しませんでした。Python 構造オブジェクトのリストを読み戻せるように、この関数への入力をフォーマットするにはどうすればよいですか? 参考までに、参照されている C 構造体は次のとおりです。

どこSANE_String_Constで として定義されていc_char_pます。

このオブジェクトの私の Python/ctypes バージョンは次のとおりです。

これから期待される動作(構造オブジェクトのリスト)を取得できるように、何を渡す必要があるかについての提案はありますか?すべての回答に感謝します。

更新 1:

以下を使用して、正しい SANE_Device Python 構造を取得できました。

ただし、1) うーん、2) 結果が 1 つしかない場合にのみ機能するようです。devices.contents.contentsまたはで len() を実行できませんdevices.contents.contents.contents。結果の数を決定するにはどうすればよいですか? SANE のドキュメントでは、「関数が正常に実行された場合、*device_list 内の SANE_Device 構造へのポインタの NULL 終了配列へのポインタを格納する」と指定されています。提案?

更新 2:

10 項目の配列を渡し、次を使用して最初の要素にアクセスできました。

ただし、10 は明らかに恣意的な数であり、実際の結果の数を決定する方法はありません。devices.contents.contents.contents[1].nameデバイスが 1 つしか接続されていないときにアクセスしようとすると、セグメンテーション フォールトが発生します。ctypes では、このような可変長構造を処理する適切な方法が必要です。

0 投票する
6 に答える
7956 参照

.net - VB.NET での参照

VB.NET のクラスへの参照 (ポインタ?) は、私にはやや不明確です。私が尋ねようとしている質問は、少しテストすることで答えることができますが、誰かが適切な説明 (またはリンクも) を投稿できるかどうか疑問に思っていました。

クラスを作成する場合:

そして、実際にこのクラスをプロパティとして使用するクラス:

そして、次のように使用します。

これで、参照が参照ではなく「値によって」新しいクラスに渡されたとしても、関数BooleanCheckは常に を返します。そのため、クラスのコピーは作成されませんが、 のローカル変数は引き続き のプロパティを参照/ポイントします。trueUsingClassmyReferenceUsingClassReferenceRuntimeOrSomething

これはどのようにエレガントに説明できますか?

0 投票する
5 に答える
1054 参照

c - 初心者の C プログラマーはポインターの助けが必要です (私は思います)

私は初心者プログラマーで、母国語である C を学んでいます。

私は主に Deitel と Deitel の C How to Program の本から学んでいますが、大学のサンプルタスクやものも使用していますが、1 つにこだわっています。

私はポインターの非常に基本的な理解を持っています-変数の前に & を追加するとアドレスが出力され、 * ポインターを使用してそのアドレスなどに格納されている値が使用されます。

私が書いたコードは、2 つの数値の最大 (最大?) 公分母を計算するためのものであり、実際にはポインターを必要とせず、まったく必要としません。2 つの関数を使用しており、メインに戻すのではなく、2 番目の関数から実行すると正しい答えが画面に出力されるため、ロジックはすべて正しいです。ここに問題があります。

2 番目の関数が応答値を返すとき、何らかの理由で、ポインターであるとしか想定できないものを返します。なぜこれを行うのかわかりません。これを操作して値を検索するように変換することはできますが、2 番目の関数のローカル ポインターのようであり、上書きされます。私が見つけることができるウェブ上や私の本の中には、問題を解決する方法を教えてくれるものは何もありませんでした.

ここまで読んでくれてありがとう。ぶらぶらしすぎました。

これが私のコードと出力です。ヘルプやポインタ(しゃれを許して)をいただければ幸いです。2番目の関数で出力するだけでよいことはわかっていますが、希望する値を返さない方法と理由を知りたいです。

コード

出力 (12 と 15 を使用 - 答えは 3 である必要があります)

frankodwyer からのこのような単純なソリューション。それは私が見つけられない、または知らないような小さなものです。では、返されたのはポインターではなく、ただのジャンクだったのでしょうか?

どうもありがとう。