Mon problème consiste à renvoyer un tableau à deux dimensions créer dans mon main.
Dans cette fonction je veux rajouter des valeurs puis que ces valeurs soient sauvegardées dans le tableau et que le tableau soit réutiliser dans le main.
Voiçi un exemple de programme qui est plus explicit que mon charabia maladroit çi dessus.
#include <stdio.h> #include <stdlib.h>
int num_perso_ordi(int *tab_ordi) //apelle du tableau définie précédemment dans le main
int main()
{
int tab_ordi[5][5]; //déclaration du tableau à 2 dimensions
num_perso_ordi(tab_ordi); //utilisation de la fonction num_perso
printf("\n… %ld ",tab_ordi[0][0]); //affichage des valeurs ajoutées dans la fonction main pour contrôle
printf("\n %ld ",tab_ordi[1][0]);
printf("\n %ld ",tab_ordi[2][0]);
printf("\n %ld… ",tab_ordi[3][0]);
}
Ayant cherché plus de 2 heures je suis légèrement désespéré donc si vous pouviez corriger ma syntaxe et m’expliquer en quoi consistait mon erreur je vous en serais reconnaisant.
Merci
#include <stdio.h>
#include <stdlib.h>
int num_perso_ordi(int **tab_ordi) //apelle du tableau définie précédemment dans le main
{
// indirection vers l'adresse mémoire du tableau
int ** curtab = &*tab_ordi;
// pointe sur le premier élément
*curtab[0]=1;
*curtab[1]=2;
*curtab[2]=3;
*curtab[3]=4;
*curtab[4]=5;
printf("affichage num_perso_ordi\n");
printf("\n %d ",*curtab[0]); //affichage des différentes valeurs du tableau
printf("\n %d ",*curtab[1]);
printf("\n %d ",*curtab[2]);
printf("\n %d ",*curtab[3]);
printf("\n %d ",*curtab[4]);
printf("\n");
}
int main()
{
//int tab_ordi[5][5]; //déclaration du tableau à 2 dimensions
int **tab_ordi;
tab_ordi = (int**)malloc(sizeof(int));
// une boucle est plus façile mais c'est pour bien montrer l'ordre d'alloc ...
tab_ordi[0] = (int*)malloc(sizeof(int));
tab_ordi[1] = (int*)malloc(sizeof(int));
tab_ordi[2] = (int*)malloc(sizeof(int));
tab_ordi[3] = (int*)malloc(sizeof(int));
tab_ordi[4] = (int*)malloc(sizeof(int));
num_perso_ordi(tab_ordi); //utilisation de la fonction num_perso
printf("affichage tab_ordi\n");
printf("\n %d ",tab_ordi[0][0]); //affichage des valeurs ajoutées dans la fonction main pour contrôle
printf("\n %d ",tab_ordi[1][0]);
printf("\n %d ",tab_ordi[2][0]);
printf("\n %d ",tab_ordi[3][0]);
printf("\n %d ",tab_ordi[4][0]);
printf("\n");
fgetc(stdin);
// ... et de dealloc
free(tab_ordi[4]);
free(tab_ordi[3]);
free(tab_ordi[2]);
free(tab_ordi[1]);
free(tab_ordi[0]);
// ne pas oublier de désallouer le pointeur
free(*tab_ordi);
return 0;
}
Dynamique ou pas, c’est plus efficient (plus perf que l’indexation), j’aurais pu encore optimiser mais par soucis de visibilité, je n’ai pas trop poussé le raisonnement
Mais j’ai encore un problème ! J’ai besoin que mon tableau intègre plusieurs colonnes. Comment faire pour qu’elles soient prises en compte ?
J’ai tenté de rajouter des colonnes et d’entrer des valeurs dans des colonnes différentes mais j’ai un message d’erreur : invalid type argument of `unary *’
ok c’est bien pratique pour faire toute une ligne d’un seul coup mais je préfèrerai faire tout une colonne d’un seul coup !
Je sais je suis chiant mais ca marche déjà comme il faut donc c’est pas la peine de changer.
En fait j’ai besoin d’ajouter une valeur dans une case de mon tableau mais en faisant un scanf dans une autre fonction.
Donc je ne sais comment je peux écrire ca…
J’ai tenté de faire ca mais ca ne marche pas, la valeur que j’entre n’est pas renvoyée dans mon tableau :