Tableau 2 dimension en C

Signaler
Messages postés
3
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
17 janvier 2006
-
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013
-
voila je cherche a modifié une entrée dans un tableau a 2 dimension en C ... j ai essayé le code suivant mais je n obtien que des echec ... en bon debutant je solicite votre aide :)


void Cap_mID(int *CapInfo[50][5],int id, int nvoid)
{
*CapInfo[Cap_chID(&CapInfo,id)][0]= nvoid;
}

int Cap_chID(int CapInfo[50][5], int id)
{
int i=0;

while (Cap_ID(CapInfo,i)!=id) i++;

return i;
}

si quelqu'un pourrai m expliqué comment corrigé se code pour qu il fonctionne cela m arrangerai beaucoup

Merci

5 réponses

Messages postés
40
Date d'inscription
mercredi 26 mars 2003
Statut
Membre
Dernière intervention
3 septembre 2008

Salut , tu dois creer un tableau a 2 entrees

int tableau [50][5]; // donc chaque case de ton tableau contient un int

apres si tu veux modifier les entrees de ton tableau tu dois parcourir le parcourir avec 2 boucles .

for(int i = 0; i <50; i++)

{

for(int j = 0; j <5; j++)

{

tableau[i][j] = 0; // ou la valeur que tu veux stocker



}

}



je pense que se sera plus simple de faire cmme cela


Tous les chemins mènent au RHUM !!!!!!!!!!!!!!!!!!!..............................
Messages postés
3
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
17 janvier 2006

le probleme c est que je veux faire sa en procédure ... et j ai un probleme avec les pointeurs

merci quand meme de ta reponse
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

Salut,

Normalement c'est interdit de passer un tableau en parametre. Il y a une legere difference entre la declaration d'un tableau et celle d'un pointeur sur pointeur. Comme tu n'a pas le droit de passer un tableau en parametre, tu n'a pas le droit de definir sa taille :
int **CapInfo //et non int CapInfo[50][5]

Quand tu declare un pointeur sur pointeur, tu declare en fait plusieur chose
un pointeur sur pointeur qui ponte sur un tableau contenant lui-meme des pointeurs vers le type désiré.

//Declaration et allocation du tableau de pointeur
//Il doit faire la taille du nombre de ligne
int **CapInfo = (int*) malloc(50*sizeof(int*));

//Initialisation du tableau de pointeur
int i = 0;
while(i < 50)
{
//Allocation de chaque colonne du tableau
CapInfo[i] = (int) malloc(5*sizeof(int));
i++;
}

Et seulement maintenant tu as le droit de faire CapInfo[10][3] = 20;
Tu peux aussi, maintenant que le tableau de pointeur pointe au bon endroit, le passer en parametre.
C'est de l'allocation dynamique, donc tu DOIS ABSOLUMENT penser a désallouer avant que ton programme se termine :

//Desallocation des colonnes
int i = 0;
while(i < 50)
{
free(CapInfo[i]);
}
//Desallocation des lignes
free(CapInfo);

Le travail c'est la santé, ne rien faire c'est la préservé !!!
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Wohohooo c'est quoi c'est? int *CapInfo[50][5] ;) c'est pas bon tu doit déclarer comme ceci :



soit int *CapInfo[]

soit int CapInfo[50][5] /* pas recommandé, mais ça marche */

soit int **CapInfo



:D



Pour le reste (j'avai pas lu) ctx_man te la expliqué :p



bon code



++All
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

Petite precision :
int *Capinfo[]; // Normalement interdit en C

Il manque une taille de tableau ou une liste d'initialisation. Le compilateur ne peut donc pas savoir la taille du tableau de pointeur a allouer. Cette declaration est valable uniquement pour char *argv[] dans le main dans la mesure ou c'est le system qui fixe la taille maximale du parametre. La taille n'est donc pas a specifier puisque le system la connait.