J'ai donc le code suivant (très simple): Voici ce que je pense strong> je fais (j'ai appris qu'en C ++, je suis rarement faire ce que je pense que je pense): p> est tout cela correct? p> p>
3 Réponses :
Votre deuxième déclaration est fausse. Vous allouez un nouveau Int hors du tas. La constante de la compilation «32» n'a pas d'adresse et vous ne pouvez donc pas le prendre. Vous créez une INT dont la valeur est 32. Ce n'est pas la même chose.
int* pInt1 = new int(32); int* pInt2 = new int(32);
Si la variable a été définie comme int valeur = 32; Vous seriez correct. Cependant, y compris la constante dans le constructeur en fait un objet. Si vous avez fait cela, la variable serait optimisée à un const int i>.
Que voulez-vous dire par "en fait un objet"?
C'est une distinction très subtile, mais pour une compréhension complète, il est nécessaire de le signaler. Je pense que le libellé correct serait "2. énoncéa imprime l'adresse d'un int code> qui contient la valeur" 32 "".
@Mark Ransom: J'ai réparé mon message pour refléter votre déclaration. @Deadmg: Si, par exemple, votre code a été écrit, je pourrais exprimer l'égalité des valeurs pointées de cette manière: (* pint1 == * pint2). Est-ce correct?
@Storm Kiernan: Oui, c'est correct et votre déclaration modifiée est également correcte.
L'instruction B imprime la valeur de l'objet qui pinte pointe. Il pointe vers un int avec la valeur 32, de sorte qu'il imprime 32.
Les déclarations A et C sont indéfinies. L'objet étant imprimé dans les deux cas est un pointeur, qui au niveau de la machine est une adresse mémoire. La plupart des compilateurs imprimeront un nombre hexadécimal, bien qu'il n'y ait aucune garantie qu'il le fera. La valeur dépendra également de l'endroit où les objets sont stockés. Par exemple, g ++ dans Windows Vista 32 bits sur mes impressions de mon ordinateur: P>
00131D10 32 0028FE24
std :: COUT << PINT << STD :: endl; // déclaration A code> p>
std :: COUT << * PINT << STD :: endl; // déclaration B, qui devrait imprimer 32 code> p>
std :: COUT << & PINT << STD :: endl; // déclaration C code> p>