salut à tous et à toutes
je suis débutant en programmation en C
svp ou se trouve l'erreur dans ce programme
salut à tous et à toutes
je suis débutant en programmation en C
svp ou se trouve l'erreur dans ce programme
- tu retournes un tableau local
- indenter l'intérieur des for aide à la lisibilité
Et hors programme
- poster une image quand poster le code est plus rapide, simple et efficace
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
je retourne un pointeur qui stocke l'adresse du premier élément d'un tableau.
d'après ce que je sais:
le passage par adresse ça passe en C
après vérification
la valeur de v est la même que celle de t et p.
Bonsoir.
A moins de dire une bêtise p[] n’existe que dans la fonction multipli ();.
Retourner son pointeur renvoie en réalité une adresse non allouée. Le contenu de cette portion mémoire est donc aléatoire.
Transmets plutôt ton tableau alloué dans le main (); à la fonction sous cette forme :
Toute modification de p dans multipli () sera bien entendu conservée au retour de la fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int p[11]; multipli (p, x); ...
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
Bonjour
L'erreur: on ne retourne jamais un tableau local car on ne fait que retourner une adresse, adresse d'un truc qui n'existe plus quand on quitte la fonction. Tu veux retourner un pointeur, soit tu retournes un pointeur que tu as préalablement reçu en paramètre (dans ce cas il n'est pas local), soit il est local mais alors tu lui alloues un espace (malloc/calloc) avant de le retourner mais l'allocation mémoire c'est peut-être une notion pas encore connue.
Quelques détails: traiter *(p+i) ne sera pas plus rapide que de traiter p[i]. C'est vrai qu'on dit qu'utiliser un pointeur est plus rapide qu'utiliser un indice, mais il faut savoir lire cette affirmation. C'est plus rapide uniquement à condition d'avoir le pointeur déjà positionné sur la bonne case du tableau ; et de préférence si la case est utilisée plus d'une fois (pour rentabiliser l'incrément, qui lui reste quoi qu'il arrive nécessaire). Autrement dit, écrire for (i=0; i < 11; i++) printf("%d + %d=%d\n", t[i], t[i], t[i] + t[i]) pourra là s'écrire for (i=0, p=t; i < 11; i++, p++) printf("%d + %d=%d\n", *p, *p, *p + *p). Mais sinon *(p+i) ou p[i] c'est exactement pareil.
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <stdio.h> void multiplie(int *t, int n, size_t sz) { size_t i; int *p; for (i=0, p=t; i < sz; i++, p++) *p=i*n; } int main() { int t[11]; multiplie(t, 7, 11); size_t i; int *p; for (i=0, p=t; i < 11; i++, p++) printf("%d\n", *p); }
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Merci beaucoup
vous m'avez vraiment éclairé
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager