Pointeur de tableau.
Résolu
Jika
-
Jika -
Jika -
Bonjour tout le monde,
ça fait deux jours que je joue avec les pointeurs en C et je bloque sur une question.
D'après ce que j'ai compris, chaque fois qu'on "évalue" un tableau il est converti en pointeur sur son premier élément sauf ;
si il est passé à sizeof
si on place l'opérateur & devant
et dans le cas d'une chaîne de caractère assignée à un char*[] // par ex char* str[] = "chaine"
J'ai aussi lu que &tab etait redondant.
j'ai bien tout compris jusque la ?
mais si je fais par exemple :
Donc j'ai l'impression qu'il y a une subtilité que je n'ai pas saisie. Il ne pointe pas sur le premier élément de tab aussi mon pointeur apres avoir fait un &tab ?
Merci d'avance :)
ça fait deux jours que je joue avec les pointeurs en C et je bloque sur une question.
D'après ce que j'ai compris, chaque fois qu'on "évalue" un tableau il est converti en pointeur sur son premier élément sauf ;
si il est passé à sizeof
si on place l'opérateur & devant
et dans le cas d'une chaîne de caractère assignée à un char*[] // par ex char* str[] = "chaine"
J'ai aussi lu que &tab etait redondant.
j'ai bien tout compris jusque la ?
mais si je fais par exemple :
int tab[5] = {1,2,3,4,5}; int (*p)[5] = tab; // ne fonctionne pas, je suis obligé de faire &tab
Donc j'ai l'impression qu'il y a une subtilité que je n'ai pas saisie. Il ne pointe pas sur le premier élément de tab aussi mon pointeur apres avoir fait un &tab ?
Merci d'avance :)
A voir également:
- Pointeur de tableau.
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
4 réponses
Salut !
(Huhu je ressors mes vieilles notions de C vu en cours)
& te donne l'adresse.
int tab[5] = {1,2,3,4,5};
int p[5] = tab; // Te "copie" la même chose que tab dans une autre zone mémoire (à confirmer par quelqu'un de plus compétent !)
int a[5] = &tab; // Te fais un lien vers tab lui même en mémoire
tab[0] = 6;
printf : tab[0] te donne 6
p[0] te donne 1
a[0] te donne 6
(Huhu je ressors mes vieilles notions de C vu en cours)
& te donne l'adresse.
int tab[5] = {1,2,3,4,5};
int p[5] = tab; // Te "copie" la même chose que tab dans une autre zone mémoire (à confirmer par quelqu'un de plus compétent !)
int a[5] = &tab; // Te fais un lien vers tab lui même en mémoire
tab[0] = 6;
printf : tab[0] te donne 6
p[0] te donne 1
a[0] te donne 6
et dans le cas d'une chaîne de caractère assignée à un char*[] // par ex char* str[] = "chaine"
Je reformulerais en disant dans des initialisations par des chaînes de type "xyz"
Sinon ok pour le reste.
int (*p)[5] = tab; // ne fonctionne pas, je suis obligé de faire &tab
Cela doit fonctionner, mais un warning devrait être remonté (en C standard).
Mais d'un point de vue type, &tab et tab sont différents. C'est pour ça que le compilateur relève un warning.
Je reformulerais en disant dans des initialisations par des chaînes de type "xyz"
Sinon ok pour le reste.
int (*p)[5] = tab; // ne fonctionne pas, je suis obligé de faire &tab
Cela doit fonctionner, mais un warning devrait être remonté (en C standard).
Mais d'un point de vue type, &tab et tab sont différents. C'est pour ça que le compilateur relève un warning.
Nope, c'est incorrect. Le compilateur va remonter une erreur. Un tableau ne s'initialise pas comme ça. L'explication est d'ailleurs donnée par Jika ;-).
int a[5] = &tab;
Incorrect également pour la même raison.