2010-08-01 12 views
2

J'ai une question très simple.Comment initialiser un pointeur entier en C++?

Je veux écrire la ligne ci-dessous du code dans 2 lignes:

IplImage *image = 0; 

comme:

IplImage *image; 
image = 0; 

Je veux savoir ce que je l'ai écrit est correct ou bien je veux savoir comment écrire le bon (en deux lignes).

Merci

+3

Pourquoi désirez-vous deux lignes? – GManNickG

+3

Pourquoi appelez-vous cela un "pointeur entier"? Vous avez un pointeur vers une structure 'IplImage', pas vers un' int'. Le '0' littéral est défini par le langage C++ comme la notation de code source pour un pointeur NULL, il n'est pas utilisé comme un entier. L'utilisation de tout autre entier provoquerait une erreur de compilation. –

+1

Il n'y a aucun moyen de dire si c'est "correct" ou non sans savoir ce que vous essayez de faire. Votre code est formellement correct. Pourtant, il y a une forte suspicion que cela ne fasse pas ce que vous voulez faire, puisque vous mentionnez un "pointeur entier" dans le titre de la question, alors qu'il n'y a pas de "pointeur entier" dans votre code. – AnT

Répondre

5

Parfaitement correct. Mais si vous n'avez pas une très bonne raison de le faire de cette façon, je suggère de le laisser comme une seule ligne qui à la fois le déclare et l'initialise. C'est plus évident, et vous risquez moins de manquer l'initialisation d'un pointeur de cette façon.

1

C'est correct. Pourquoi tu ne l'as pas essayé?

+4

Eh bien, l'argument pourrait être fait que la plupart des compilateurs ont des extensions; Ce n'est pas parce que cela fonctionne que cela est valable selon la norme. –

1

Écrire

IplImage *image = 0; 

semblent être plus clair car il est évident qu'un pointeur est utilisé.

Avec

IplImage *image; 
image = 0; 

vous pouvez avoir des lignes de code supplémentaires entre la première et la deuxième ligne. La deuxième ligne (image = 0) me semble moins claire. Peut-être renommer la variable à pImage améliore la lisibilité si vous préférez la deuxième option (deux doublures).

0

Iplimage est la structure définie dans opencv. Vous pouvez utiliser le code ci-dessous pour initialiser le pointeur:

Iplimage* image=cvCreateImage(width,height,channels); 
0

En C++

IplImage *image(NULL); 

woul également admis, même si elle peut être source de confusion au sujet de votre image à allouer en appelant le constructeur avec la premier argument défini sur NULL. Cependant, déclarer + l'initialisation dans 1 ligne est toujours modifié et presque tous les cas. Le seul cas que je vois où il vaut mieux s'initier en 2 lignes c'est quand la ligne est trop longue.

Questions connexes