2010-03-04 5 views
1

Je suis juste essayer d'obtenir ma tête autour de différents concepts de pointeur et j'ai le code suivant:Pointeur pour pointer l'allocation de mémoire, pourquoi est-ce faux?

char** a = new char*; // assign first pointer to point to a char pointer 

    char b[10] = "bla bla"; 
    *a = new char; //assign second pointer a block of memory. -> This looks wrong to me!! 
    (**a) = b[2]; 

Alors qu'est-ce qui ne va pas avec la deuxième allocation de mémoire « pointeur »? Cela fonctionne et tout, mais ça ne va pas.

EDIT:

Merci pour le clarifier! J'ai appris quelque chose!

+4

Euh .... Il n'y a rien de mal à cela. – Yacoby

+0

Pourquoi pensez-vous qu'il y a quelque chose qui ne va pas? Si vous essayez de traiter '* a' comme une chaîne C, * alors * vous ne pouvez pas, mais sinon votre code est correct. –

+0

C'est techniquement correct. Mais qu'essayez-vous exactement d'accomplir? –

Répondre

1

*a = new char; signifie que vous créez une seule variable char en utilisant son constructeur par défaut. Il est équivalent à *a = new char(); Et vous attribuer l'adresse de la variable vient d'être créé au pointeur une

2

Il n'y a rien de mal à cela, sauf que l'utilisation de l'allocation de mémoire dynamique est plutôt mauvais style en C++.

+0

alors comment le feriez-vous dans un bon style C++ alors? –

+1

char a = 'a'; ... ou si l'on a besoin d'un double pointeur pour une raison obscure, char a = 'a'; char * ap = & a; char ** app = ≈ – Tronic

2
char** a = new char*; // a is a pointer to a pointer to a type char. allocate a new pointer variable and make a point to it. 
char b[10] = "bla bla"; // define a char array. 
*a = new char; // allocate a new char and make the pointer whose address is in a point to it. 
(**a) = b[2]; // copy the 3rd char of b to the char whose address is pointed by a. 
1

La seule raison pour laquelle il est « mauvais » est qu'il ne sait pas. Vous êtes évidemment d'accord que ce n'est pas clair.

Dans certains contextes, un code similaire peut être «correct» lorsque, avec de meilleurs noms et une meilleure structure de classe, le but est clair, supprimant également le doute sur les moyennes.

0

Il n'y a rien de mauvais sur le plan technique. Cependant, il est rare d'attribuer explicitement un pointeur à un pointeur sur un seul élément de la même page de code. Vous ne feriez pas cela très souvent en pratique, pour la même raison que vous diriez rarement "Si vous avez besoin de savoir sur le FooBar, demandez à Tom, et Tom est moi."

0

rien à redire, de façon critique. Mais il semble que le style est rarement utilisé.

Questions connexes