問題タブ [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 ポインターのキャスト
古い C コードでは、次のようなことがよくあります。
malloc()
から返されたポインターをキャストするポイントは何void *
ですか? 古い C コンパイラが void ポインタをサポートしておらず、代わりmalloc()
に返していたからchar *
でしょうか?
c++ - ポインターに関する興味深い問題..助けてください
Sixeof(ptr) と Sizeof(a)
は 4 を表示します Sizeof(int) は 4 を表示し、sizeof(char) は 1 を表示します
したがって、65 は 4 バイトに格納され
ます。
上記のコードでは、最初のバイト x(type int) に格納されている値を出力する動機で、int* を char* に型キャストしました。
したがって、型キャスト後、「a」は最初のバイトアドレス、つまり ptr にも含まれます (int)*a を表示すると、値を表示するために最初のバイトのみを考慮する必要があります..?? しかし、出力は0(最初のバイト値)ではなく65です..どこが間違っているのでしょうか..?
私が学んだことは
PS - 私は Dev-C++ に取り組んでいます
c - Generic editable functions in C using void*
I fall in some problem.
I need to write some function like memcpy(void*, const void*)
, which its signature should be:
I noticed that, in many implementation of memcpy
, we cast void* to char*, but I think this is not the case of me, as the arrayCopy
function needed to be used on arrays of many types including structs
.
So, how can I accomplish this?
EDIT: the source code might be something like that:
Thanks.
porting - 移植の問題: VC++ のオフセットを持つポインター
OK、これは Linux の GCC で問題なくコンパイルされます。
ただし、次の行のために、Windowsへの移植に問題があります...
無効なポインターであるため、VC++ はポインターをオフセットしたくありません。プロジェクト全体がextern "C"の下で構築されているため、CPPがポインターオフセットを許可しないという通常の警告は意味がありません。
現在、これは多くの機能の 1 つにすぎず、これに対する答えを見つけることで、すべてを修正することができます。ライブラリ プロジェクトを最初から書き直す必要はなく、MinGW でビルドしたくありません。これを行うには、私が行方不明で、Google で見つけられない方法が必要です。
c++ - 削除する前に、C++でvoidポインタをテストします
私はC++で配列を持っています:
これは、それが含まれるクラスのコンストラクターで初期化されます。
デストラクタには次のものがあります。
Valgrindを介してプログラムをテストする場合を除いて、voidポインターを削除するための呼び出しがいくつかあると表示されます。
このエラーを回避するために、deleteを呼び出す前に、playerArrayがvoidポインターであるかどうかをテストしたいと思います。
誰かがこれを行う方法を知っていますか?
c - void ポインターを使用した不定型の配列の管理
C の qsort 関数と同じ方法で、独自の Mergesort 関数を作成しようとしています。既知の項目の配列に対して MergeSort を書いていれば問題はありませんが、それらがどうなるかわからないため、ループに陥ります。
私の教授から与えられた仕様では、マージに別の関数を使用することは望まれていませんでした。そのため、Mergesort 関数自体の内部にその実装を記述しています。つまり、qsort() と同じ情報が得られるということです。
void* base
- 並べ替える配列の最初の要素へのポインタsize_t nel
- 配列の要素数size_t width
- 各要素のサイズint (*compar)( const void*, const void* )
- 各要素を比較する方法を示す関数
私が抱えている問題は、マージ部分にあります。私が見たすべての実装では、一時的な配列を使用して、並べ替え中のアイテムを格納していました。私は void ポインターの操作に慣れていません。私が見つけた最大の障害は、移動して配列に値を代入することです。が指す配列の 2 番目のインデックスの値を見つけるにはどうすればよいbase
ですか? その配列の値を一時配列に割り当てるにはどうすればよいですか? その一時的な配列を作成するにはどうすればよいですか?
void ポインターを char にキャストし、それらを幅だけインクリメントすると機能しますか? ただし、割り当てがどのように機能するかはわかりません。
c++ - C++ での void * キャストの緩和
C では、 へのポインタのキャストと からのポインタのキャストはエラーではありませんvoid *
。
C++ への移植における大きな障害は、 などの汎用ポインターを扱う関数malloc
や、 などの独自のコードで宣言された関数から戻るときに、ポインターをキャストする必要があることvoid *block_get(Blkno const blkno);
です。
ただし、私のコードは、CおよびC++ コンパイラによって正常にコンパイルされることを意図しています。C++ のためにどこでも明示的なキャストを提供する場合、それらは C スタイルのキャストである必要があり、両方の言語のポインター型との間で非ポインター型をキャストするため、バグをマスクしている可能性があります。
私の参照エラーは次のとおりです。
MSVCで生成されるもの:
エラー 2 エラー C2440: 'initializing' : 'void *' から 'Cpfs *' に変換できません e:\src\cpfs\cpfs.c 179
明らかに私は使用できないnew
かstatic_cast
、C を使用しなくなった場合に自然に使用するものです。最小限の冗長性で各言語を囲む最大の型安全性を提供する最良の方法は何ですか?void *
c - voidポインタのsize
なぜsizeof
voidポインタなの2
ですか?
c++ - realloc の置き換え (C --> C++)
以前の質問で、ポインターの型キャストについて尋ねましたが、malloc の代わりに C++ 割り当てシステムを使用するというより良い解決策に向けられました。(一部の C コードを C++ に変換しています)
ただし、同様の機能にはまだ問題があります。
私が変更され:
と
ただし、次の関数で realloc を使用するにはどうすればよいですか。
次のエラーが表示されます。
編集2:
さて、私が得ているコンセンサスは、現在のソリューションを捨てる必要があるということです (私はそれを行うことにオープンです)。
私が正しく理解していることを確認するために、オブジェクトへのポインターの配列の代わりに、オブジェクト自体を含むベクトルが必要なのですか?
c - ボイド・代入問題
ポインター演算を使用してパケット構造体からいくつかのフィールドを取得したいのですが、以下のコードの何が問題になっていますか?
最初の条件では、パケットの先頭から 4 バイト (2 つの短いフィールド) に移動すると tLow を取得すると思います。しかし、期待値が得られません。私の考えは間違っていますか?