Pointeurs et chaînes C ++

J'apprends le C++, et je suis un peu confus sur les pointeurs (en particulier dans le code source suivant). Mais d'abord, je continue de vous montrer ce que je sais (et puis qui contraste avec le code par rapport à cela parce que j'ai l'impression que si il y a quelques contradictions qui se passe).

Ce que je sais:

int Age = 30;
int* pointer = &Age;

cout << "The location of variable Age is: " << pointer << endl;
cout << "The value stored in this location is: " << *pointer << endl;

Pointeurs de tenir des adresses de mémoire. À l'aide de l'indirection (déréférencement) opérateur ( * ), vous pouvez accéder à ce qui est stocké dans la mémoire de l'emplacement du pointeur. Sur le code de ce livre, je vais avoir du mal à comprendre...

cout << "Enter your name: ";
string name;
getline(cin, name); //gets full line up to NULL terminating character

int CharsToAllocate = name.length() + 1; //calculates length of string input
                          //adds one onto it to adjust for NULL character
char* CopyOfName = new char[CharsToAllocate];
//pointer to char's called CopyOfName, is given the memory address of the 
//beginning of a block
//of memory enough to fit CharsToAllocate. Why we added 1? Because char's need a 
//NULL terminating character (
cout << "Enter your name: ";
string name;
getline(cin, name); //gets full line up to NULL terminating character
int CharsToAllocate = name.length() + 1; //calculates length of string input
//adds one onto it to adjust for NULL character
char* CopyOfName = new char[CharsToAllocate];
//pointer to char's called CopyOfName, is given the memory address of the 
//beginning of a block
//of memory enough to fit CharsToAllocate. Why we added 1? Because char's need a 
//NULL terminating character (\0)
strcpy(CopyOfName, name.c_str()); //copies the string name, into a pointer?
cout << "Dynamically allocated buffer contains: " << CopyOfName << endl;
delete[] CopyOfName; //always delete a pointer assigned by new to prevent memory leaks
)
strcpy(CopyOfName, name.c_str()); //copies the string name, into a pointer? cout << "Dynamically allocated buffer contains: " << CopyOfName << endl; delete[] CopyOfName; //always delete a pointer assigned by new to prevent memory leaks

De sortie:

Enter your name: Adam
Dynamically allocated buffer contains: Adam

Les commentaires dans le code ci-dessus sont mes commentaires. Mon problème commence avec strcpy. Pourquoi est - name.c_str() copié dans un pointeur CopyOfName? Est-ce à dire que toutes les chaînes sont essentiels pointeurs? Donc, comme
string test = "Bonjour le monde";
Est en fait un pointeur pointant vers l'emplacement mémoire où "H" est stocké?

Ensuite, pourquoi est-il dans l'imprimé de déclaration à l'aide de CopyOfName et pas *CopyOfName? Les pointeurs de tenir des adresses de mémoire? À l'aide de *CopyOfName serait d'imprimer le contenu de l'emplacement mémoire. J'ai essayé ce Code::Blocks et si l'entrée de texte "Hello World". À l'aide de *CopyOfName dans l'imprimé de déclaration donnerait juste un "H". Cela fait sens, parce que quand j'ai déclaré que j'avais besoin d'un bloc de mémoire avec la "nouvelle chose", cela renvoie un pointeur sur la première partie du bloc de mémoire allouée dynamiquement.

La seule façon de me réconcilier, c'est si une chaîne est en fait un pointeur.

string testing = "Confused";
cout << testing << endl;

serait d'imprimer le mot "Confus"

Cependant, si j'essaie de compiler

string testing = "Confused";
cout << *testing; 

Je reçois un message d'erreur.

En gros, pour résumer ma question, je suis en train d'essayer de comprendre le code avec strcpy et la cout déclaration.

source d'informationauteur DWade64 | 2013-12-27