8
votes

Position du mot clé Const

Quelle est la différence entre les trois déclarations de pointeur suivantes en C:

myPointer = somethingElse;

c

3 commentaires

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; :)


@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.


4 Réponses :


0
votes
  • myPonpert1 est un point de pointeur const sur vide .
  • myPoinger2 et myPoinder3 sont les deux pointeurs sur const void .

    la différence entre myPonpert2 et myPoinder3 déclarations est juste une question de style.

    NB: const void signifie ici que les données pointues sont const . Rien à voir avec void à partir de int principal (void) par exemple.


4 commentaires

Quelle serait la signification de void type (ou const vide à ce sujet)? Par exemple, ce qui peut être affecté à l'adresse indiquée par un tel pointeur ( * myPonpert2 =? )


@icePack: un void * 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 . Vous n'écririez pas de valeur au pointeur le pointeur , 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 Voici un alias pour "n'importe quoi" contrairement à une signification normale de Void .


@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 pour un traitement ultérieur. (Voir MALLOC () .) L'utilisation de "vide" n'est donc pas aussi inadaptée que cela pourrait sembler.



1
votes

Dans certains endroits, vous pouvez mettre le const devant tout ce qui est déclaré const : xxx

vous pouvez Toujours Mettez le Const après tout ce qui est déclaré Const: xxx

Par conséquent, ma recommandation personnelle, < EM> TOUJOURS Demandez à la fuite const , car c'est la seule "règle" qui peut être respectée de manière cohérente.


0 commentaires

9
votes

Lisez les règles de droite à gauche:

const void *myPointer3;


1 commentaires

Vos types 2 et 3 ( const Void * ) sont très significatifs et requis si vous souhaitez attribuer à partir d'un autre pointeur const , tel que const char * s = " ... "; const vide * vp = s;



0
votes
  1. void * const mypoinder1; = déclarer mypoinder1 comme le pointeur constant à vide
  2. void const * mypoinder2; = déclarer MyPonpert3 comme Pointeur sur Void Const
  3. const vide * myPoinder3; = déclarer myPonpert3 comme Pointeur sur Const Void

    Chaque fois que dans de tels doutes, vous pouvez utiliser :: CDECL.ORG

    Vous devriez essayer myPointer1 pour éviter la condition que vous avez expliquée car il s'agit d'un pointeur const .


1 commentaires

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.