5

C# で void ポインターを宣言するにはどうすればよいですか?

4

3 に答える 3

13

void* identifier;

ただし、次のように安全ではない必要があります。

unsafe
{
    void* identifier;
}

また、プロジェクトで安全でないコードが許可されている必要があります。

于 2010-06-18T12:16:36.880 に答える
3

あなたの質問は、仮定以外のことをするのにかなり短いので、マネージドコードを意味していると思います。

私はあなたが探しているかIntPtr、単にobject参照を探していると思います(これは基本型であり、ヌルポインタの基本的な同等物 - 「何か」への参照です)。nullポインターを意味しない限り、その場合はIntPtr.Zero.

于 2010-06-18T12:17:05.780 に答える
1

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 安全でないコード

于 2010-06-18T12:17:10.553 に答える