Utiliser les pointeurs pour les tableaux

Résolu/Fermé
yadhus Messages postés 33 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 16 mars 2009 - 5 mars 2008 à 17:40
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 5 mars 2008 à 18:08
Bonjour,
J'ai des problèmes pour saisir un tableau et l'afficher à l'aide des pointeurs; Bref voici le code source que j'ai essayé mais ça ne marche pas........


#include <stdio.h>



typedef char * string;



int saisie_tab (int *p, string mess, int N) {

int *pdeb,*pfin;
int T[10];
pdeb=&T[0];
pfin=&T[N];
for (p=pdeb-1;p<pfin-1;p++)
{
puts (mess);
scanf ("%d", *p);
}
return *p;
}





void affiche_tab (int *p, int N) {

int *pdeb,*pfin,T[10];
pdeb=&T[0];
pfin=&T[N];
for (p=pdeb-1;p<pfin-1;p++)
{
printf ("\t%d\t|", p);
}
}


int main () {

int *t;
int N=10;
string mess;
gets (mess);
saisie_tab (t,mess,N);
printf ("Voici votre tableau\n");
affiche_tab (t,N);



return 0;
}


Merci d'avance
A voir également:

1 réponse

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
5 mars 2008 à 18:08
Bonsoir, ça fait longtemps que je ne pratique plus le C (ou C++ c'est presque pareil) mais je ferais ta fonction de remplissage autrement, parce que là c'est... pas top (si je peux me permettre).

Qu'est ce qui ne va pas actuellement dans ta fonction :
Tu lui passe un pointeur sur un entier, un message à afficher et un entier (nombre d'entier pour remplir le tableau)
Ce que tu fais :
int *pdeb,*pfin;
int T[10];
pdeb=&T[0];
pfin=&T[N]; 


Tu tente d'accèder au valeur d'un tableau d'entier qui n'est pas initialisé et qui n'a rien dedans, donc ici je pense que ton programme doit partir en erreur.
Je ne sais pas ce que tu chercher à faire exactement, et dis moi si ce n'est pas ça, mais je pense que tu souhaite simplement remplir ton tableau pour les indices allant de 0 à N ? C'est bien ça ?

Si oui, il faut d'abord que tu initialise et alloue de l'espace mémoire à ton futur tableau. Ensuite ta fonction devra retourner ce même tableau (pour le récupérer dans ton main). Restera ensuite à boucler de 0 et N et demander à chaque passage dans ta boucle l'entier que souhaite entrer l'utilisateur.
Concrètement (outre la syntaxe qui n'est peut être pas correcte pour l'allocation), ça donne ceci :
int* saisie_tab (string mess, int N){
int *T = N * malloc( int ); // -- Pointeur sur un tablea de taille N, a confirmer :s
for ( int i = 0; i < N; i++ ){
    puts (mess); 
    scanf ("%d", T[i]); 
}
return T;
}



La fonction d'affichage :
void affiche_tab (int *p, int N) {

for (i=0;i<N;i++)
{
printf ("\t%d\t|", p[i]);
}
} 


Et le main :
int main () {
int N = 10;
string mess;
gets (mess);
int *t = saisie_tab (mess,N);
printf ("Voici votre tableau\n");
affiche_tab (t,N);

return 0;
} 


Voilà, l'idée est là, reste la syntaxe à vérifier.
0