Pourquoi cout affiche-t-il des tableaux de caractères différents des autres tableaux?
Je suis à l'aide de C++ pour comprendre exactement comment les pointeurs de travail. J'ai ce morceau de code à l'aide de tableaux, que j'ai de l'aide afin de comprendre la façon dont l'équivalent travaille avec des pointeurs.
int main() {
int arr[10] = {1,2,3};
char arr2[10] = {'c','i','a','o','int main() {
int arr[10] = {1,2,3};
char arr2[10] = {'c','i','a','o','\0'};
cout << arr << endl;
cout << arr2 << endl;
}
'};
cout << arr << endl;
cout << arr2 << endl;
}
Cependant lorsque je l'exécute, arr
sorties à l'adresse du premier élément du tableau d'entiers (comme prévu) mais arr2
n'est pas sortie de l'adresse du premier élément du tableau de caractères; il en fait des tirages "ciao".
Qu'est-ce que je suis absent ou que je n'ai pas encore appris à ce sujet?
source d'informationauteur Luca Matteis
Vous devez vous connecter pour publier un commentaire.
C'est l'opérateur<< qui est surchargé pour
const void*
et pourconst char*
. Votre char tableau est converti àconst char*
et transmis à la surcharge, parce qu'il s'adapte de mieux que deconst void*
. Le tableau int, cependant, est converticonst void*
et passé à cette version. La version de l'opérateur<< prise deconst void*
juste sorties de l'adresse. La version la prise de laconst char*
en fait la traite comme un C-string et sorties de chaque personnage jusqu'à ce que le caractère de fin null. Si vous ne voulez pas que, convertir votre char tableau deconst void*
explicitement lors du passage à l'opérateur<<:Parce que le cout du
operator <<
est surchargé pourchar*
à la sortie des chaînes, etarr2
matches.Si vous voulez l'adresse, lancez le tableau de caractères comme un vide pointeur.
Il y a une norme de surcharge pour char* qui renvoie une chaîne terminée par le caractère NUL.
Alors que le casting est sans doute plus significative approche, vous pouvez également utiliser l'opérateur addressof: