Adresse de tableau

Résolu
Nanard -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
je déclare un tableau en c de ce type char tab[11][8];

sauf que l'adresse de tab[1][0] et tab[0][8] sont les même ansci que tab[2][0] et tab[1][8]etc...

quelqu'un serait t'il d'ou vien le probleme ????
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
quelqu'un serait t'il d'ou vien le probleme ????
Il n'y a en a pas ;-)).

tab[i][j] est l'expression allégée de *(*(tab+i)+j)
En C, les tableaux sont représentés linéairement en mémoire.
Puisque le tableau à une taille de 11 par 8, incrémenter j de 8, revient à augmenter i de 1.
Ainsi, tab[1][0] = *(*(tab+1)+0)= *(*(tab+1-1)+0+8) = *(*(tab+0)+8) = tab[8][0].

Cdlt
1
Nanard
 
ok ok merci tout le monde donc si je veux un tableau de 9 case par douze je doit déclarer mon tableau comme ca :

char tab [11][9]; ????
0
loupius > Nanard
 
mdr
J'en connais un qui va se faire tirer les oreilles ;-)
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Nanard
 
je veux un tableau de 9 case par douze
Si tu veux un tableau de 9 lignes et 12 colonnes : char tab[9][12].
Si tu veux un tableau de 12 lignes et 9 colonnes : char tab[12][9].
0
Nanard > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
oula oula elle sont tout rouge mes oreil
je vais allez assayer tout ca

mais portant si on veu un tableau de 15 variable on déclare "tab [14]" vu que ya tab [0] non ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Nanard
 
Oula oula elle sont tout rouge mes oreil
Et elles vont rougir encore ;-))).

mais portant si on veu un tableau de 15 variable on déclare "tab [14]" vu que ya tab [0] non ?
Si tu veux un tableau de 15 cases, il faut déclarer tab[15]. La première case sera tab[0] et la quinzième (la dernière) sera tab[14]
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Oui, de toi ;)
tab[N] est un tableau dont les cases vont de tab[0] à tab[N-1], ce qui fait que tab[N] n'existe pas !
Dans ton cas, c'est pareil, tu défini tab[11][8], donc tab[x][8] n'existe pas.
Bon, ensuite, il faut savoir que les tableaux 2D ne le sont pas dans les faits : toutes les cases sont les unes à coté des autres.
Donc tab[x][y] est équivalant à tab[x*8+y]
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Donc tab[x][y] est équivalant à tab[x*8+y]
T'as un oublié un pointeur.
L'équivalent de tab[x][y] est plutôt : (*tab)[x*8+j].
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
C'est pour ça que j'ai dit équivalent, et pas égale ;) :p
Je voulais juste souligner le fait qu'il y avait une opération cachée et une continuité des casses en mémoire.
Et comme tab est un tableau, je ne voulais pas trop m'avancer sur la gestion en pointeur :p (je ne saurait dire si il avait fallu mettre *(tab[x*8+y]) ou (*tab)[x*8+y] ou autre...)
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Oui, il y a du tirage d'oreille ! surtout que je t'ai expliqué dans mon message que ça allait de 0 à N-1 un tableau !
Par contre, fiddy, je ne suis pas trop d'accord avec toi sur ligne et colonne. Il y a la première dimension et la deuxième dimension, mais rien ne dit si la première doit être ligne ou colonne. ça dépend du standard adopté
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Effectivement. Dans la mesure où la notion de tableaux n'existe pas dans la mémoire, il n'y a que des conventions. Même si la convention Ligne Colonne est plus répandue, il est bon de rappeler que ce n'est qu'une convention.
0