tomalille
Messages postés52Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 5 juin 2007
-
24 janv. 2006 à 22:54
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 2008
-
31 janv. 2006 à 22:12
Bonjour,
je travaille sur un programme minupulant des tableaux.
Est-il possible de faire une fonction renvoyant plusieurs tableaux à la fois.
Concrêtement peut-on faire un :
return tab1,tab2;
Deplus, si cela est possible, comment faire ensuite pour les réutiliser.
Merci
Thomas
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 25 janv. 2006 à 17:15
Si c'est un tableau à plusieurs dimensions, il faut utiliser un pointeur de pointeurs (pointeur double).
En fait, un seul tableau de pointeur de type int.
Chaque pointeur de ce tableau pointe de la mémoire.
// int avec 2 '*' allocation tableau de pointeurs de type int*
int **tempDemandes = new int*[nbChemins];
// Allocation de 5 int pour chacun des nbChemins pointeurs du tableau int**
for (i=0; i<nbChemins; i++)
tempDemandes[i] = new int[5];
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 24 janv. 2006 à 23:06
Impossible de renvoyer plusieurs paramètres.
Par contre, tu peux donner en paramètres des adresses dans la mémoire où il y a des pointeurs vers des tableaux.
void tableau(char** tab1, int** tab2)
{
char *array1 = new char[128];
int *array2 = new int[14];
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 25 janv. 2006 à 16:44
C'est mal dit.
Les pointeurs initialement ne pointent rien du tout.
La fonction alloue de la mémoire dont les adresses sont stockées dans ces pointeurs.
Ca revient à faire:
int main()
{
char *chartab = new char[128];
int *inttab = new int[14];
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 31 janv. 2006 à 22:12
Pour définir un tableau de structure, pas besoin de répéter struct.
TYPELIENS tempTypes[nbTypesLiens];
Quand tu fais TYPELIENS tempTypes[nbTypesLiens]; dans une fonction, de la mémoire est allouée pour les structures mais effacée aussitôt la fonction quittée. Donc, tu renvoies une adresse qui ne pointe pas de donnée 'sûre'. Il se peut que l'ordinateur ait écrit dessus puisqu'elle est libre.
Tu as défini la structure à l'exterieur et tu passes à la fonction le pointeur vers les données. Utilise-le ainsi:
void lectureTypes(TYPELIENS *types)
{
int i;
for(i=0;i<nbTypesLiens;i++)
{
fscanf(fichierEntree,"%d",&(types->nbCanaux));
fscanf(fichierEntree,"%d",&(types->prixKm));
fscanf(fichierEntree,"%d",&(types->tpsNettoyage));
fscanf(fichierEntree,"%d",&(types->tpsConnexion));
types++; // car types est une copie que tu peux modifier
}
}