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 :

assignation pointeur via fonction


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut assignation pointeur via fonction
    Bonjour,

    J'aimerais savoir pourquoi dans ce premier code ci-dessous, mon pointeur est bien assigné à l'adresse du tableau tab alors que sur le second ça ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    tU8 tab[10] = {0};
     
    tU8* aa()
    {
       return &tab[0];
    }
     
    static void Main(void)
    {
         tU8 *ptr = NULL_PTR;
        ptr = aa();
    }


    Second code où mon pointeur ptr reste NULL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    tU8 tab[10] = {0};
     
    void aa(tU8 *ptr)
    {
       ptr = &tab[0];
    }
     
    static void Main(void)
    {
         tU8 *ptr = NULL_PTR;
        aa(ptr);
       printf("add : %02x", ptr);
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    C'est l'erreur du noob

    En C , tous les paramètres sont passés par valeur. C'est à dire que tu ne peux pas le modifier.

    Donc ta fonction est obligée de passer le fameux double pointeur , soit l'adresse d'un pointeur pour pouvoir modifier le pointeur void aa(tU8** ptr).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void aa(tU8** ptr) {
        if (ptr != NULL) {
            (*ptr) = tab;
        }
    }
     
    // ...
     
        tU8* ptr = NULL_PTR;
        aa(&ptr);
    Au passage ton code code est assez mauvais : aucun test de pointeur NULL, le nom du tableau est déjà un pointeur sur la 1ière case, la signature de la fonction main est int main(int argc, char** argv).
    Ensuite je pense que si tu utilises une variable globale c'est par facilité pour apprendre le concept de pointeur avant les allocations dynamiques (malloc), mais une variable globale c'est moche.

    Édit : c'est quoi ces types et ces constantes qui sortent de nulle part tU8, NULL_PTR. Apprends déjà les types du C99

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Ok pigé, merci bien à toi pour ton explication.

    En ce qui concerne la qualité du code, c'était juste un exemple écrit vite fait sur notepad pour juste mettre en valeur ma question. Ce n'est évidemment pas pour être utilisé dans un programme global.

    Citation Envoyé par foetus Voir le message
    Édit : c'est quoi ces types et ces constantes qui sortent de nulle part tU8, NULL_PTR. Apprends déjà les types du C99
    C'est juste l'habitude des redefinitions des types en embarqué, mais ça ne change rien sur le fond de la question.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. allocation **pointeur NULL via fonction
    Par BioKore dans le forum Débuter
    Réponses: 4
    Dernier message: 19/11/2017, 23h34
  2. Compilation via tableau de pointeurs de fonctions
    Par Mixikin dans le forum Bibliothèques, systèmes et outils
    Réponses: 4
    Dernier message: 22/04/2014, 00h53
  3. Passer pointeur via message à autre prog
    Par YéTeeh dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/08/2003, 23h08
  4. appel xmlservice via fonction javascript
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 06/05/2003, 14h24
  5. pointeur de fonction
    Par kardath dans le forum C
    Réponses: 4
    Dernier message: 28/12/2002, 14h39

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