Quelle est la différence entre les trois déclarations de pointeur suivantes en C:
myPointer = somethingElse;
4 Réponses :
myPonpert1 code> est un point de pointeur const code> sur vide code>. li>
-
myPoinger2 code> et myPoinder3 code> sont les deux pointeurs sur const void code>. li>
ul>
la différence entre myPonpert2 code> et myPoinder3 code> déclarations est juste une question de style. p>
NB: const void code> signifie ici que les données pointues sont const code>. Rien à voir avec void code> à partir de int principal (void) code> par exemple. P>
Quelle serait la signification de void code> type (ou const vide code> à ce sujet)? Par exemple, ce qui peut être affecté à l'adresse indiquée par un tel pointeur ( * myPonpert2 =? Code>)
@icePack: un void * code> est un "pointeur générique", c'est-à-dire un "pointeur à quoi que ce soit". Vous attribueriez une autre valeur de pointeur à celle-ci, comme myPoinger = autrepointer code>. Vous n'écririez pas de valeur au pointeur i> le pointeur i>, cependant.
@Devsolar Oui, je suis au courant de cela. Je me demandais de la signification sémantique du "pointeur à vide". Cela me semble qu'une telle description est logiquement incorrecte. Void Code> Voici un alias pour "n'importe quoi" contrairement à une signification normale de Void code>.
@icePack: Non, c'est un "pointeur vide": le pointeur lui-même existe bien, mais cela ne souligne rien (utilisable). Vous pouvez le jeter à un autre type de pointeur et utiliser que i> pour un traitement ultérieur. (Voir MALLOC () CODE>.) L'utilisation de "vide" n'est donc pas aussi inadaptée que cela pourrait sembler.
Dans certains endroits, vous pouvez mettre le vous pouvez Toujours em> Mettez le Par conséquent, ma recommandation personnelle, < EM> TOUJOURS EM> Demandez à la fuite const code> devant tout ce qui est déclaré const code>: Const code> après em> tout ce qui est déclaré Const: p> const code>, car c'est la seule "règle" qui peut être respectée de manière cohérente. p> p>
Lisez les règles de droite à gauche:
const void *myPointer3;
Vos types 2 et 3 ( const Void * code>) sont très significatifs et requis si vous souhaitez attribuer à partir d'un autre pointeur const code>, tel que const char * s = " ... "; const vide * vp = s; code>
void * const mypoinder1; code> = déclarer mypoinder1 comme le pointeur constant à vide fort> li>
-
void const * mypoinder2; code> = déclarer MyPonpert3 comme Pointeur sur Void Const fort> Li>
-
const vide * myPoinder3; code> = déclarer myPonpert3 comme Pointeur sur Const Void Strong> Li>
ol>
Chaque fois que dans de tels doutes, vous pouvez utiliser :: CDECL.ORG P>
Vous devriez essayer myPointer1 strong> pour éviter la condition que vous avez expliquée car il s'agit d'un pointeur const code>. p>
D'AILLEURS. CDECL.ORG ne prend pas en charge le "VOID Const * MyPonponer2;". C'est pourquoi j'ai atterri sur cette page, googling pour confirmer ce que je me suis souvenu, de cette façon est la même chose que la voie 3.
Ne me dis pas que vous avez essayé de rechercher à ce sujet et que vous n'avez rien trouvé.
Ne manquez pas
const void * const mypointer; code> :)@LiHo j'ai fait mais n'a rien trouvé qui était pur c (pas C ++ ou Objc) et c'était pour des types de pointeur simples sans mélanger des fonctions.