Question à propos du * pour les tableau de caracteres

Résolu
Amanobuo Messages postés 65 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 11 décembre 2006 - 7 déc. 2005 à 17:25
Amanobuo Messages postés 65 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 11 décembre 2006 - 7 déc. 2005 à 20:50
Bonjour !

Je m interroge sur l utilisation du * apres le type d une variable

j ai compris par quelques tests et de tutos qu'il s agit de l'adresse d'une la variable.



Cependant j essaye de faire un tableau de chaine de caracteres et avec ce code :



char tab[3][3]={{"a1","b","a"},




{"f","g","f"}};



j ai une erreur : invalid conversion from `const char*' to `char'



apres avoir mis une * apres char, le programme compile et je peut affigher ses elements

et je voudrai bien savoir pourquoi on est obligé de declarer un pointeur pour un simple

tableau de caractere (si obligation il y a).



merci !

7 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
7 déc. 2005 à 18:34
int tableau[4] <= un tableau de 4 entier.



La première case en mémoire du tableau a l'adresse &tableau[0] ou tableau.



&tableau[0] est de type (int *), tableau aussi.



tableau[3] = *(tableau + 3); <= c'est la meme chose. Dans le
deuxième cas. On cherche la case dont l'adresse est tableau + 3 entiers
(4 octets).

C'est équivalent à : &tableau[3] = tableau + 3 (ici le compilateur
sait que + 3 signifie plus 3 * la taille d'un entier, donc 12
octets.)



On peut déclarer un tableau d'entier de facon dynamique.



int * tableau = new int[4];



pas oublier de détruire apres: delete[] tableau.



tableau contient l'adresse de la première case du tableau d'entier.



Il y a rien de difficile la dedans. C'est les BASES de chez BASES du C/C++ !
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
7 déc. 2005 à 17:36
char tab[3][3]={{'a1','b','a'},



{'f','g','f'}};





'X' est un caractère, "X", une chaine de caractère.
0
Amanobuo Messages postés 65 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 11 décembre 2006
7 déc. 2005 à 17:47
Bon a savoir,

mais pourquoi utiliser un operateur d' indirection * pour un tableau de chaine ?
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
7 déc. 2005 à 17:52
Attention!
Dans ton 1er message, tab était en fait un tableau 2D de chaine de caractères (donc un tableau 2D de "char *")
Dans la correction de Luhtor, tab devient un tableau 2D de caractères (et donc un tableau 2D de "char")

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Amanobuo Messages postés 65 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 11 décembre 2006
7 déc. 2005 à 18:06
d'acco

donc il existe une différence dans la déclarations entres les chaînes et les caractères simple (guillemets simples ou double)

et que dans le cas d'une chaine on met un * ? mais je ne vois pas le rapport avec une chaine de caractères et les pointeurs...
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
7 déc. 2005 à 18:35
Une chaine de caractère, c'est un tableau d'entier en fait. Sauf que
les entiers font 1 octet. C'est tout. Faut acheter du bouquin si ca te
parait pas clair. On peut rien faire sans comprendre comment fonctionne
les tableaux.
0
Amanobuo Messages postés 65 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 11 décembre 2006
7 déc. 2005 à 20:50
kapish

En fait je reprend la prog apres un an sans dev, j essaye d aller trop
vite et j en reviens souvent aux bases comme ici, mais comme disait l
autres mes vieux reflexes commances a revenir,

merci pour ces reponses.
0
Rejoignez-nous