IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Passage de paramètres dans une fonction : les pointeurs :)


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Points : 208
    Points
    208
    Par défaut Passage de paramètres dans une fonction : les pointeurs :)
    Je vous expose la situation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void fonction_1(float* tab[20]) {
      /* modification des valeurs de tab, 
      pour une initialisation par exemple */
    }
     
    void fonction_2() {
      float tab[20];
     
      fonction_1(&tab);
      /* ... */
    }
    Voici la sortie du compilateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     warning: passing argument 1 of ‘fonction_1’ from incompatible pointer type
    J'ai essayé de passer différemment le pointeur mais sans succès..
    Quelqu'un peut-il me fournir un début de solution ?

    Merci

  2. #2
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Salut,

    Le nom du tableau représente l'adresse de sa première case
    Voici ton exemple modifié pour illustrer ce concept :
    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define MAX_SIZE 20
     
    void fonction_1( float tab[], size_t taille ) 
    {
    	size_t i;
     
    	for( i=0 ; i<taille ; i++ )
    	{
    		tab[i]=i;
    	}
    }
     
    void fonction_2( void )
    {
    	float tab[MAX_SIZE];
    	size_t i;
     
    	fonction_1( tab, MAX_SIZE );
     
    	for( i=0 ; i<MAX_SIZE ; i++ )
    	{
    		printf("tab[%d]=%.2f\n",i,tab[i]);
    	}
    }
     
    int main( void )
    {
    	fonction_2();
     
    	return 0;
    }
    @++

  3. #3
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Points : 208
    Points
    208
    Par défaut
    merci mais tu ne réponds pas à ma question !
    Ce que je veux, c'est modifier le tableau dans fonction_1() ... La tu ne fais qu'afficher les données.

  4. #4
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    Il me semble que quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void fonction_1(float tab[20]) {
      /* modification des valeurs de tab, 
      pour une initialisation par exemple */
    }
    .. sans le * donc, c'est deja un passage par paramètres, et tu l'appeles dans main() avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    float tableau[taille];
     
    fonction_1(tableau);
    sans le &.

    en effet : tab[] == *tab (declaration de ta fonction)

    donc : &tableau[] == &(*tableau) = tableau (appel dans main)

    Tu peux vérifier, les modifications faites par la fonction sur ton tableau sont gardées.

    Réponse à ta question ?

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par bit_o Voir le message
    Je vous expose la situation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void fonction_1(float* tab[20]) {
      /* modification des valeurs de tab, 
      pour une initialisation par exemple */
    }
     
    void fonction_2() {
      float tab[20];
     
      fonction_1(&tab);
      /* ... */
    }
    Voici la sortie du compilateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     warning: passing argument 1 of ‘fonction_1’ from incompatible pointer type
    C'est normal

    1 le type de &tab n'est pas float* tab[20]
    2 il est inutile de passer l'adresse du tableau pour accéder à ces éléments. Le nom du tableau désigne l'adresse du premier élément. Il suffit donc d'un pointeur de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void fonction_1(float *tab) 
    {
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void fonction_1(float tab[]) 
    {
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void fonction_1(float tab[123]) 
    {
    }
    Nota : dans le cadre d'un paramètre de fonction, tab[123], tab[1234] et tab[] sont équivalents. Ce sont tous une forme de *tab.

  6. #6
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par bit_o Voir le message
    merci mais tu ne réponds pas à ma question !
    Ce que je veux, c'est modifier le tableau dans fonction_1() ... La tu ne fais qu'afficher les données.

    La fonction_2 affiche le tableau après appelle à la fonction_1 pour montrer qu'il a belle et bien été modifié par cette dernière ...

    as-tu pris la peine de lire tranquillement mon post ?

  7. #7
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par ssmario2 Voir le message

    La fonction_2 affiche le tableau après appelle à la fonction_1 pour montrer qu'il a belle et bien été modifié par cette dernière ...

    as-tu pris la peine de lire tranquillement mon post ?
    en effet, je ne devais pas avoir bien lu .. ou bien avoir lu trop vite, désolé!

    Merci pour vos explications

Discussions similaires

  1. [Flex3] [AS3] Passage de paramètres dans une fonction
    Par Grimpozarbre dans le forum Flex
    Réponses: 2
    Dernier message: 26/01/2011, 09h08
  2. Passage de paramètres dans une fonction
    Par Mickael2604 dans le forum Langage
    Réponses: 6
    Dernier message: 07/12/2008, 22h42
  3. Réponses: 3
    Dernier message: 20/03/2006, 17h46
  4. Réponses: 9
    Dernier message: 13/05/2005, 03h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo