Quina diferència hi ha entre "nom * char" i "nom * char" en el llenguatge de programació C?


Resposta 1:

No hi ha diferència.

Tot i això, en la meva opinió, com a desenvolupador de C / C ++ / C # de molt de temps, hauries de fer servir

char * nom;

El motiu d’això és que us heu d’acostumar al fet que el tipus de dades de “nom” és “punter a car”. Posar l'asterisc al costat de "char" crida l'atenció sobre el fet que l'asterisc forma part del tipus de dades.


Resposta 2:

No hi ha diferència. Simplement és una qüestió de preferència d’estil.

******************************>

No crec que pugui comentar la resposta de Sylvain Rodrigue i crec que necessita una resposta, ja que és fonamentalment incorrecte. Perquè * nom sigui un operador de referència de referència (operador d’indirecció) el seu operand ha de tenir un tipus de punter.

A l'esborrany estàndard ISO n1570, "char *" es descriu com un "tipus derivat" (tipus 6.2.5)

Des del n1570:

6.2.5 Tipus

- Un tipus de punter es pot derivar d'un tipus de funció o un tipus d'objecte, anomenat

tipus referenciat. Un tipus de punter descriu un objecte el valor del qual proporciona una referència

a una entitat del tipus referenciada. Un tipus de punter derivat del tipus T referenciat

de vegades s'anomena "punter a T". La construcció d'un tipus de punter a partir de a

al tipus de referència s'anomena "derivació de tipus punter". Un tipus de punter és complet

tipus d'objecte.

6.5.3.2 Adreces i operadors d’indirecció

Restriccions

2 L'operador de l'operador unari * ha de tenir un tipus de punter.


Resposta 3:

No hi ha diferència EXCEPTE per a la següent situació. Suposem que esteu definint diverses variables de punter. Compareu i contrasteu aquestes dues línies:

char * p, * p2, * p3; // Això fa el que creus que fa.
char * p, p2, p3; // Això no fa el que creus que fa.

Aquestes dues línies fan coses molt diferents. La segona línia aquí declara p com una variable de punter, però p2 i p3 no són declarats punters, només variables ordinàries del tipus char. Això no està malament tècnicament (a part que les variables simples del tipus char no són especialment fiables ni útils); només és enganyós.

El segon estil anterior - per acostar el * al nom del tipus - apareix sovint en codi, però té la possibilitat de crear declaracions enganyoses en declarar diversos varsers del punter, com es mostra més amunt.

Per cert, hi ha una manera d’aconseguir l’efecte que probablement desitgi aquesta segona línia anterior. Primer, utilitzeu typedef per crear un tipus de punter.

typeedef char * CPTR;

Ara podeu declarar diversos indicadors de manera més eficient:

CPTR p, p2, p3;