問題タブ [void-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.
c - void ポインタを使用した動的配列キュー データ構造の問題
思うように解決できないのかもしれませんが、よくわからないので質問させてください...
ユーザーが必要な数のアイテムで初期化できるように、動的配列を使用して単純な Queue を実装しました。void
また、任意のデータ型を許可するためにポインターを使用しようとしていますが、それが問題です。
これが私のコードです:
問題はqueuePop
機能にあります。呼び出すと、すぐに解放するため、値が失われます。このジレンマを解決できないようです。ライブラリを汎用的でモジュール化したいと考えています。ユーザーはメモリの割り当てと解放を気にする必要はありません。それはライブラリの仕事です。
ユーザーはどのようにして値を取得しqueuePop
、ライブラリにすべてのメモリ割り当て/解放を処理させることができますか?
c - 二重間接参照を処理するときの互換性のないポインターの警告を回避する
このプログラムを仮定すると:
...どういうわけかGCC警告を回避することは可能ですか
... (void**) にキャストせずに (または単に互換性チェックを無効にして)? indirection-level に関する互換性警告を維持したいので...
c++ - void ポインターを取り除く方法
私はもともと C で書かれた大きなアプリケーションを継承しました (ただし、その間に多くの C++ も追加されました)。歴史的な理由により、アプリケーションには多数の void ポインターが含まれています。窒息し始める前に、なぜこれが行われたのかを説明させてください.
アプリケーションにはさまざまなデータ構造が含まれていますが、それらは「汎用」コンテナに格納されています。最近では、テンプレート化された STL コンテナーを使用するか、すべてのデータ構造に共通の基本クラスを与えて、コンテナーが基本クラスへのポインターを格納できるようにしますが、[良い?] 古い C 時代には、唯一の解決策はstruct-pointer を void-pointer にキャストします。
さらに、これらの void ポインターで機能するコードが多数あり、C でポリモーフィズムをエミュレートするために非常に奇妙な C 構造を使用します。
私は現在、アプリケーションを作り直しており、void ポインターを取り除こうとしています。すべてのデータ構造に共通の基本クラスを追加するのはそれほど難しくありません (数日かかります) が、問題は、コードが以下に示すような構造でいっぱいであることです。
これは、データの保存方法の例です。
これは、データが再度フェッチされる方法の例です。
実際には、すべての void ポインターをいくつかのスマート ポインター (参照カウント) に置き換えたいのですが、自動化するためのトリックが見つかりません (または少なくとも) void- との間のすべてのキャストを取り除くのに役立ちます。ポインター。
これらの変換を見つけたり、置き換えたり、何らかの方法で操作したりするためのヒントはありますか?
c++ - void*をstd::stringに変換する
Webを熟読して自分自身をいじった後、void *のターゲット(文字列)をstd::stringに変換できないようです。このページsprintf(buffer, "%p", *((int *)point));
で推奨されているようにC文字列を取得しようとしましたが、役に立ちませんでした。そして悲しいことに、はい、私はvoid *を使用する必要があります。これは、SDLがUSEREVENT構造体で使用するものだからです。
興味のある人のために、Usereventを埋めるために使用しているコードは次のとおりです。
何か案は?
編集:すべての応答に感謝します。void*をstd ::string*にキャストする必要がありました。愚かな私。どうもありがとうございました!
c++ - What's the best way to make a bitwise function work for any type of integer input c++?
So I need to read flags in bits and set flags in bits. These bits are in various sizes of integer: int16, int32, int64, etc.
I would like to have a function that does something like this:
I don't want to code what will be the same code to isolate bits from for different sizes of integers in separate but identical functions (for the multitude of bit functions I want to write).
I thought about using a void pointer for the data so everything could run through one function. Is this a bad design? What about as far as efficiency goes? I have no concept of bad/good design due to my inexperience.
These flags have to be looked at very often as this is for a data acquisition system. Would a void pointer implementation be reasonably efficient?
I know premature optimization is bad, but I would like to know what things are generally less or more efficient than others so I can make good decisions.
Thanks in advance for taking me to school.
c - 「BIO *client = (BIO *)arg」という表現はどういう意味ですか?
コードのコンテキストは次のとおりです。
式(BIO *)arg
は void ポインターarg
を BIO を指すポインターに変換しますか? これが正しいかどうかはわかりません。
どんな助けでも大歓迎です!
Z禅
c# - void* を C# で使用できる型に変換する方法は? C DLL と C# 間の相互運用性
私は C/C++ プログラマーですが、デバイスと通信するために C# で記述されたプログラムを更新するように依頼されました。C# に関する私の知識は非常に基本的なものです。
以前のバージョンはすべて C# で記述されていましたが、実際にデバイスにアクセスする API が C に変更されました。C 関数の API を次のようにインポートできることがわかりました。
C では、この関数プロトタイプは次のとおりです。
HANDLE は次のように定義されます。
ただし、この機能は期待どおりには機能しません。実際、C# コード呼び出しでは、どのような型を宣言して C# メソッドに渡す必要があるのでしょうか?
助けてくれてありがとう。愚かな質問でごめんなさい。
c++ - void** が関数を指すようにする方法は?
次のようなコードがあります。
呼び出し元が pFunction ポインターを介してこの関数を使用できるように、void** pFunction 引数が関数を指すようにする必要があります。この関数は DLL を介して呼び出されます。この方法では実行したくありませんが、多くの理由から選択の余地がありません。COMがこのために作られていることは知っていますが、使用できません。理由は管理にあります。
現時点では、これを行う方法がわかりません。私がやろうとしたことはすべて、キャストの問題を引き起こします。どうすればこれを行うことができるか誰にも分かりますか? これが不明な場合は、さらに投稿できます。
ありがとう。
c++ - MSVC の void * でポインター演算を実行中にエラーが発生しました
私はフォローしません。GCC は void * ポインター演算について文句を言うことはありません-ansi -pedantic -Wall
。どうしたの?
これがコードです-
c - C の void ポインターのポインター演算
特定の型 (たとえばint
、char
、float
、 ..) へのポインターがインクリメントされると、その値はそのデータ型のサイズだけ増加します。void
サイズのデータを指すポインターがインクリメントされる場合x
、どのようにしてx
バイト先を指すようになりますか? x
コンパイラーは、ポインターの値に追加することをどのように認識しますか?