C# で void ポインターを宣言するにはどうすればよいですか?
3 に答える
void* identifier;
ただし、次のように安全ではない必要があります。
unsafe
{
void* identifier;
}
また、プロジェクトで安全でないコードが許可されている必要があります。
あなたの質問は、仮定以外のことをするのにかなり短いので、マネージドコードを意味していると思います。
私はあなたが探しているかIntPtr
、単にobject
参照を探していると思います(これは基本型であり、ヌルポインタの基本的な同等物 - 「何か」への参照です)。nullポインターを意味しない限り、その場合はIntPtr.Zero
.
http://msdn.microsoft.com/en-us/library/y31yhkeb%28VS.80%29.aspxから
Visual Studio 2005その他のバージョン43 人中 22 人がこの記事が役に立ったと評価しました - このトピックを評価してください 安全でないコンテキストでは、型は値型または参照型と同様にポインター型である可能性があります。ポインター型の宣言は、次のいずれかの形式を取ります。
type* identifier; void* identifier;
//許可されますが、推奨されません。次の型のいずれかがポインター型である可能性があります。sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、または bool。
任意の列挙型。
任意のポインター型。
アンマネージ型のみのフィールドを含むユーザー定義の構造体型。
ポインター型はオブジェクトから継承されず、ポインター型とオブジェクトの間に変換は存在しません。また、ボックス化とボックス化解除はポインタをサポートしていません。ただし、異なるポインター型の間、およびポインター型と整数型の間で変換することはできます。
同じ宣言で複数のポインターを宣言する場合、* は、各ポインター名のプレフィックスとしてではなく、基になる型と共にのみ書き込まれます。例えば:
int* p1, p2, p3;
// Ok
int *p1, *p2, *p3;
// C# では無効ポインターが参照を指していても、オブジェクト参照がガベージ コレクションされる可能性があるため、ポインターは参照または参照を含む構造体を指すことはできません。GC は、オブジェクトがポインター型によって指されているかどうかを追跡しません。
myType* 型のポインター変数の値は、myType 型の変数のアドレスです。以下は、ポインター型宣言の例です。
例 説明
int* p
p は整数へのポインタです
int** p
p は整数へのポインタへのポインタです
int*[] p
p は、整数へのポインターの 1 次元配列です。
char* p
p は char へのポインタです
void* p
p は未知の型へのポインタです
ポインター間接演算子 * を使用して、ポインター変数が指す位置の内容にアクセスできます。たとえば、次の宣言の場合、
int* myVariable;
式 *myVariable は、myVariable に含まれるアドレスで見つかった int 変数を示します。void* 型のポインターに間接演算子を適用することはできません。ただし、キャストを使用して void ポインターを他のポインター型に変換したり、その逆を行ったりすることができます。
ポインターはヌルにすることができます。間接演算子を null ポインターに適用すると、実装定義の動作が発生します。
メソッド間でポインターを渡すと、未定義の動作が発生する可能性があることに注意してください。例としては、Out または Ref パラメーターを介して、または関数の結果として、ローカル変数へのポインターが返されます。ポインターが固定ブロックに設定されている場合、ポインターが指す変数は固定されていない可能性があります。
次の表に、unsafe コンテキストでポインターを操作できる演算子とステートメントを示します。
演算子/ステートメントの使用 *
ポインターの間接化を実行します。
->
ポインターを介して構造体のメンバーにアクセスします。
[]
ポインターにインデックスを付けます。
&
変数のアドレスを取得します。
++ と --
ポインタをインクリメントおよびデクリメントします。
- と -
ポインタ演算を実行します。
==、!=、<、>、<=、および >=
ポインターを比較します。
スタックアロク
スタックにメモリを割り当てます。
定款
アドレスが見つかるように変数を一時的に固定すること。
C# 言語仕様 詳細については、C# 言語仕様の次のセクションを参照してください。
18 安全でないコード