Utiliser les pointeurs pour les tableaux
Résolu
yadhus
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Utiliser les pointeurs pour les tableaux
- Utiliser chromecast - Guide
- Utiliser iphone comme webcam - Guide
- Tableau croisé dynamique pour les nuls - Guide
- Les tableaux word - Guide
- Utiliser tablette comme deuxieme ecran - Guide
1 réponse
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 :
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 :
La fonction d'affichage :
Et le main :
Voilà, l'idée est là, reste la syntaxe à vérifier.
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.