Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

déclaration de tableau de pointeur

34 réponses
Avatar
Laurent B
Bonjour ,
je souhaite déclarer un tableau de pointeur sur Contact .
Contact etant une classe

on m'a proposé 2 choses ( qui sont sencé etre equivelente ) :

**contact
*contact[]

Techiniquement c du chinoix pour moi

J'ai une erreur lors de la compilation :

c:\proget c++\listecontact.h(21) : error C2059: syntax error : '*'
C:\proget c++\test.cpp(9) : error C2059: syntax error : ']'
C:\proget c++\test.cpp(14) : error C2065: 'tab' : undeclared identifier
Error executing cl.exe.

10 réponses

1 2 3 4
Avatar
fabrizio
je souhaite déclarer un tableau de pointeur sur Contact .
pointeurs


on m'a proposé 2 choses ( qui sont sencé etre equivelente ) :
sensées être équivalentes


**contact
*contact[]

Techiniquement c du chinoix pour moi
Techniquement, c'est du chinois pour moi.


classeA a; //a est de type classeA
classeA *a; //(*a) est de type classeA
//donc a est de type 'pointeur sur classeA

char **a; //a est un pointeur sur un pointeur de 'char'
char *a[]; //ceci est équivalent à la précédente

Sans le vrai code, il est impossible de comprendre où est l'erreur de
compilation.

Je m'excuse de corriger tes fautes d'orthographe/grammaire.
Tout le monde à ses limites...

Avatar
Jean-Marc Bourguet
"Laurent B" writes:

je souhaite déclarer un tableau de pointeur sur Contact . Contact
etant une classe


std::vector<Contact*> le_nom_du_tableau;

Contact* le_nom_du_tableau[la_taille_du_tableau];

on m'a proposé 2 choses ( qui sont sencé etre equivelente ) :>
**contact
*contact[]


Faudrait donner le nom du type. Donc

Contact ** contact;
Contact * contact[];

Le premier declare un pointeur vers un pointeur vers Contact. On peut
eventuellement faire pointer ce pointeur vers un tableau de pointeurs
vers Contact mais autant utiliser std::vector<Contact*>.

La seconde ecriture n'est valable que dans les declarations et
definitions de fonctions, auquel cas elle est effectivement
equivalente a la premiere. Pour declarer une variable (et non un
parametre), il faut mettre la taille.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Jean-Marc Bourguet
fabrizio writes:

char **a; //a est un pointeur sur un pointeur de 'char'
char *a[]; //ceci est équivalent à la précédente


Ah?

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
korchkidu
Laurent B wrote:

Bonjour ,
je souhaite déclarer un tableau de pointeur sur Contact .
Contact etant une classe

on m'a proposé 2 choses ( qui sont sencé etre equivelente ) :

**contact
*contact[]

Techiniquement c du chinoix pour moi
Leu milleu dent ceux ca c du tylisez lait std::vector..;)


K.

Avatar
Jean-Marc Bourguet
korchkidu writes:

Laurent B wrote:

Bonjour ,
je souhaite déclarer un tableau de pointeur sur Contact .
Contact etant une classe
on m'a proposé 2 choses ( qui sont sencé etre equivelente ) :
**contact
*contact[]
Techiniquement c du chinoix pour moi
Leu milleu dent ceux ca c du tylisez lait std::vector..;)



Une traduction en francais peut-etre?

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
fabrizio
char **a; //a est un pointeur sur un pointeur de 'char'
char *a[]; //ceci est équivalent à la précédente
Ah?



Mea culpa si ce n'est pas le cas.
Il me semblait qu'en C au moins ces deux syntaxes étaient équivalentes.

désolé.


Avatar
Marc Boyer
In article <ct88l2$6ho$, fabrizio wrote:
char **a; //a est un pointeur sur un pointeur de 'char'
char *a[]; //ceci est équivalent à la précédente
Ah?



Mea culpa si ce n'est pas le cas.
Il me semblait qu'en C au moins ces deux syntaxes étaient équivalentes.


Non, pas en C non plus.
Comme le disait Jean-Marc, ce qui est équivalent, c'est
void foo(char **a)...
void foo(char *a())...


Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.



Avatar
Jean-Marc Bourguet
Marc Boyer writes:

In article <ct88l2$6ho$, fabrizio wrote:
char **a; //a est un pointeur sur un pointeur de 'char'
char *a[]; //ceci est équivalent à la précédente
Ah?



Mea culpa si ce n'est pas le cas.
Il me semblait qu'en C au moins ces deux syntaxes étaient équivalentes.


Non, pas en C non plus.
Comme le disait Jean-Marc, ce qui est équivalent, c'est
void foo(char **a)...
void foo(char *a())...


void foo(char *a[])

naturellement.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org




Avatar
Marc Boyer
In article , Jean-Marc Bourguet wrote:
Marc Boyer writes:

In article <ct88l2$6ho$, fabrizio wrote:
char **a; //a est un pointeur sur un pointeur de 'char'
char *a[]; //ceci est équivalent à la précédente
Ah?



Mea culpa si ce n'est pas le cas.
Il me semblait qu'en C au moins ces deux syntaxes étaient équivalentes.


Non, pas en C non plus.
Comme le disait Jean-Marc, ce qui est équivalent, c'est
void foo(char **a)...
void foo(char *a())...


void foo(char *a[])

naturellement.


Oui, honte à moi...

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.





Avatar
Falk Tannhäuser
Jean-Marc Bourguet wrote:
Contact ** contact;
Contact * contact[];

Le premier declare un pointeur vers un pointeur vers Contact. On peut
eventuellement faire pointer ce pointeur vers un tableau de pointeurs
vers Contact mais autant utiliser std::vector<Contact*>.

La seconde ecriture n'est valable que dans les declarations et
definitions de fonctions, auquel cas elle est effectivement
equivalente a la premiere. Pour declarer une variable (et non un
parametre), il faut mettre la taille.


La seconde écriture sert aussi pour déclarer (sans le définir)
un tableau dont on ne connaît pas la taille :

extern Contact* contact[];

ce qui n'est cependant pas la même chose que

extern Contact** contact;

(contrairement aux listes de paramètres dans les déclarations
de fonctions, où
void foo(Contact* contact[]);
et
void foo(Contact** contact);
sont équivalents, ce qui constitue AMA une incohérence assez
énorme dans la définition du langage - c'est pour cela que
j'évite cette première écriture).

Falk

1 2 3 4