0

私はCでプログラミングしたことがないので、この構造が何をするのか誰か教えてください。

void funcName(void * self)
{ ... }

私が理解している限り、funcNameは未知のデータへのポインターを受け取り、この関数は何も受け取りません

しかし、なぜボイド*自己があるのか

4

1 に答える 1

4

これは、voidポインター(特定のタイプのないポインター)を受け取る関数です。ボイドポインタ型を使用すると、そのように宣言された関数への任意のデータ型へのポインタを渡すことができます。関数は、ポインタからデータを読み書きする前に、ポインタを適切な型にキャストするか、ポインタを他の関数に渡す必要がありますvoid*

void*任意のポインタを、暗黙的または明示的ににキャストできます。たとえば、次funcNameのように呼び出すことができます。

int *ptr = malloc(100*sizeof(int));
funcName(ptr); // No error

次に、異なるポインタタイプで同じ関数を呼び出すことができます。

struct mystruct_t *ptr = malloc(100*sizeof(mystruct_t));
funcName(ptr); // Again, no error

ポインターの名前から判断すると、selfこの関数は、Cで使用可能な構造を使用して、オブジェクト指向のプログラミングスタイルをエミュレートしようとしている可能性があります。メンバー関数のように暗黙的にポインターをデータに渡す代わりに、このスタイルはデータへの明示的なポインタ。ポインタはしばしばまたはと呼ばれthisますself

于 2012-10-11T17:24:04.627 に答える