comment utiliser le pointeur ** void correctement?

Je suis en train d'utiliser un double void pointeur mais je suis un peu confus au sujet de l'utilisation.
J'ai un struct qui contient un void ** tableau.

struct Thing{
    void ** array;
};

struct Thing * c = malloc (sizeof(struct Thing));
c->array = malloc( 10 * sizeof(void *) );

Donc, Si je veux affecter un objet différent à chaque pointeur et d'essayer de récupérer la valeur

 //Option 1
 *(c->array + index) = (void *) some_object_ptr;

 //Option 2
 c->array[index] = (void *) some_object_ptr;

puis, j'ai une autre fonction qui donne (void *) item que des points à chaque cellule, pas la some_object_ptr.

Si je veux récupérer la valeur pointée par some_object_ptr,
dois-je faire

 function return type is 'void *' and takes argument 'void *'
 //Option 3 
 return (void**) item

 //Option 4
 return *((void**)item)?

la chose étrange est que lorsque j'ai utilisé la matrice de l'indice de tableau de la méthode, je ne pouvais pas utiliser l'option 4, seule l'option 3; et lorsque je l'ai utilisé *(c->array + index) je ne pouvais que refuser de recevoir.4. et ne pas choisir.3. ..

Quelqu'un peut-il me dire à ce sujet? Si je fais quelque erreurs, alors pourriez-vous s'il vous plaît corrigez-moi?

source d'informationauteur in His Steps | 2012-01-27