Tableau 2 dimension en C

cs_Babar51 Messages postés 3 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 17 janvier 2006 - 17 janv. 2006 à 03:05
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 - 23 janv. 2006 à 11:42
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

Alucards Messages postés 40 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 3 septembre 2008
17 janv. 2006 à 11:30
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 !!!!!!!!!!!!!!!!!!!..............................
0
cs_Babar51 Messages postés 3 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 17 janvier 2006
17 janv. 2006 à 11:39
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
0
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
18 janv. 2006 à 11:45
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é !!!
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
18 janv. 2006 à 14:30
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
0

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

Posez votre question
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
23 janv. 2006 à 11:42
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.
0
Rejoignez-nous