différence entre les int* i et de type int *i
Je suis de la conversion d'un fichier d'en-tête pour une DLL écrite en C Delphi si je peux utiliser la DLL.
Ma question est quelle est la différence entre
int* i
et
int *i
Je convertir le premier à
i: PInteger;
Mais je ne suis pas sûr de ce que la conversion correcte est la deuxième en Delphi.
à partir de ma compréhension de la première est un simple pointeur typé.
Le second est un pointeur de variable. mais je ne suis pas sûr quelle est la différence.
Vous devez vous connecter pour publier un commentaire.
int* i
etint *i
sont complètement équivalentesAutant que C va ils font tous les deux la même chose. C'est une question de préférence.
int* i
montre clairement que c'est un int type de pointeur.int *i
montre le fait que l'astérisque n'affecte que d'une seule variable. Doncint *i, j
etint* i, j
permettrait à la fois de créeri
comme un pointeur de int etj
comme un int.int* i, j
mise en gardeIls sont les mêmes. Les deux différents styles de venir d'une bizarrerie dans la syntaxe du C.
Certaines personnes préfèrent
int* i;
parce queint*
est le type de je.D'autres préfèrent
int *i;
car le parseur s'attache à l'étoile de la variable, et non pas le type. Cela ne devient efficace lorsque vous essayez de définir deux variables sur la ligne. Indépendamment de la façon dont vous l'écrivez:dans chacun de ceux-ci,
i
est un pointeur vers un int, alors que j est juste un int. La dernière syntaxe rend plus clair, même si, serait encore mieux:ou mieux encore:
C'est un accident de la syntaxe du C, vous pouvez écrire soit
int *i
ouint* i
ou mêmeint * i
. Tous d'entre eux sont considérés comme desint (*i)
; OIE, le*
est lié à la demande de déclaration, pas le spécificateur de type. Cela signifie que, dans des déclarations commeseulement
i
est déclaré comme un pointeur;j
est déclaré en tant que régulier int. Si vous voulez déclarer toutes les deux comme des pointeurs, vous devez écrireLa plupart des programmeurs C utilisation
T *p
par opposition àT* p
, car d'une part, les déclarations en C sont l'expression-centric, non à l'objet central, et b) il rend mieux compte de syntaxe de déclaration.Comme un exemple de ce que j'entends par l'expression-centric, supposons que vous disposez d'un tableau de pointeurs sur int et vous souhaitez obtenir la valeur de l'entier de l'élément
i
. L'expression qui correspond à cette valeur est*a[i]
, et la type de l'expression estint
; ainsi, la déclaration de la matrice estQuand vous voyez l'expression "déclaration imite utilisation" à l'égard de la programmation en C, c'est ce que l'on entend.
Il n'y a pas de différence. Vous pouvez taper comme
int * i
si tu voulais; ils signifient tous la même chose: "je est un pointeur vers un int."C'est la même chose.
Certains développeurs préfèrent le
int* i
notation car de cette façon, le type de i est clairement "pointeur vers un int" alors queint *i
semble de moins en moins lisible.int* i
,int * i
,int*i
, etint *i
sont tous exactement l'équivalent. Cela provient du compilateur C (et il est compatible C comme les systèmes d'ignorer les espaces blancs dans jeton flux générés au cours du processus de l'analyse du code source.Certaines personnes préfèrent utiliser
int* i
de penser que cela rend le code plus propre (comme le pointeur de la directive est considérée comme faisant partie du type dans leur esprit). Certaines personnes préfèrent utiliserint *i
de penser que cela rend le code plus propre (comme le type est un type int, et ils ont un "je" pointeur à elle). Ni la technique ne fait les choses différemment après le compilateur traverse le code source. En cas de doute, imiter le style existant.Points mentionnés ci-dessus illustrent des cas où "Tapez *" qui fait le plus de sens.
Mais d'un cas où j'ai personnellement trouvé "Tapez*" fait sens intuitif/est plus lisible est lors du passage d'une référence à un pointeur de type. Il est non-intuitif pour un débutant lors de la lecture d'une variable comme :
int *&x; //what is x here ?
par opposition à :
int* (&x); //A reference to a int* type