[C] probleme tableau 2 dimensions

Hello!

Petit probleme C :grrr:

donc j’ai un truc bizarre avec un tableau à 2 dimension par exemple quand je fais l’affectation tableau[0,“b”]=5 ça me met 5 dans tableau[0,“b”] logique :wink: mais aussi dans tableau[1,“b”] tableau[2,“b”],tableau[3,“b”] etc

je comprend pas pourquoi :??:

quelqu’un peut m’aider ? :slight_smile:

oulah…

en C, tu n’utilise pas l’opérateur virgule pour changer de dimension.
Tu répéte l’opérateur [] :

tableau[1][‘b’] , etc.

tableau[1, “b”] ça ne veut pas dire élément 1, puis élément “b”, ça veut dire : effectue l’opération 1, puis “b” (et encore, l’ordre peut changer, même si on s’attend à du gauche à droite, “b” peut être fait avant 1)

Ce que tu fais là, c’est soit :

tableau[1]
tableau["b"]

Dans le second cas, ça ne risque pas trop de marcher puisque “b” c’est de type const char *, et en général ça a une adresse assez grande, donc converti en entier ça donne quelque chose genre

tableau[468] (par exemple)

donc bref…

Arf… en effet ça risquait pas de marcher! :lol:

je te remercie! :slight_smile:

j’avais oublié de preciser que c’était la premiere fois que je faisais du C je crois que ça s’est vu :whistle:

faut dire nous donner un algorithme à recopier en C alors qu’on en a jamais fait… enfin bon c’est un autre débat :smiley:

bye :wink:

Pas mal …

N’oublie pas que tu retrouve ça dans tous les langages basés sur le C (php, java, c++, etc).

Oki merci :wink: moi je suis surtout pascal :slight_smile:

Hello

je reprend mon topic car j’ai encore un probleme du meme style :frowning:

encore une fois il y a un probleme avec l’affectation dans un tableau à 2 dimensions mais à priori je fais ce qu’il faut pourtant

alors voilà j’ai reperé l’instruction qui bugait

donc avant cette instruction voilà ce qu’il y a dans mon tableau transition

transition[0][n]=1

ensuite j’execute cette instruction

transition[dernier_etat[i]][tab[i][j]]=nouvel_etat;

dans dernier_etat[i] il y a 1 et dans tab[i][j] il y a le caractere " i "
et nouvel_etat=2

et juste apres cette instruction voilà ce qu il y a dans le tableau transition

transition[0][n]=1
transition[0][e]=2 // je ne comprend pas pourquoi cette ligne apparait ?? :??:
transition[1][i]=2

voilou voilou si quelqu’un peut m’aider :slight_smile:

Comme je ne sais pas ce que tu veux faire, je vais avoir du mal pour t’aider :slight_smile:

en fait c’est un probleme de déclaration de mes tableaux.
avant je reservais de la mémoire avec malloc et j’avais pas mal de probleme. la en les déclarant “normalement” ex int tab[3] ça a l’air de mieux marcher…

j’ai aussi pas mal de probleme pour passer un tableau en parametre mais bon…

en tous cas vive le pascal! :super: c’est sans doute moins souple mais c’est loin d etre un mal! :wink:

bye

Ouais, puis surtout le compilateur Pascal il est peut-être écrit en C :slight_smile:

En C, les tableaux sont une illusion. Ce sont juste des pointeurs.

moralité :

f(int x[], size_t size) <=> f(int* x, size_t size)

int x[] = {1,2};
int* y = malloc(sizeof(int));
int z = 5;
f(&z, 1);
f(y, 1);
f(x, 2);

Mici :wink:

Bon je suis surement fatigué et aveugle mais j’ai quand meme un truc que je trouve bizarre :??:

main (){
int c;
int *i;
*i=5;
printf(" i = %d ",*i);
}

programme tres simple il m’affiche 5 jusque là c’est normal :sarcastic:

meme programme sans declarer c

main (){
int *i;
*i=5;
printf(" i = %d ",*i);
}

et la erreur windows et il m’affiche rien du tout

donc si quelqu’un comprend…?

moi j’en ai :grrr:

bye

C’est la joie des pointeurs non alloués: tu déclare un pointeur sur int (int*i) mais tu n’alloue pas de mémoire, ton pointeur pointe sur nawak, et par coup de chance, quand tu déclare une autre variable devant (le int c), le nawak est un emplacement mémoire auquel tu as droit. :wink:
moralité: soit tu alloue de la mémoire pour i, soit tu le déclare comme int, et tu utilise &i pour utiliser son addresse.

En effet… j’ai vraiment du mal :ane:

Compile avec -Wall et -ansi si tu as gcc, ça t’éviteras des bourdes de débutant.

Un des trucs à piger en C (mais ça fonctionne pareil en Pascal, j’en suis sûr) c’est le fonctionnement de la mémoire.

Merci, en effet y’a la meme chose en pascal sauf pour le passage de parametre ou la gestion de la mémoire est plus implicite.