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 :

Fonction et pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 22
    Par défaut Fonction et pointeurs
    Bonjour,

    je voudrais creer une fonction en C
    qui modifie 2 variables a travers de pointeurs

    seulement cette fonction ne modifie pas les variables
    si quelqu'un pourrait corriger SVP voici le code :
    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
    #include <stdio.h> 
    #include <stdlib.h> 
     
    char tab[2]; 
    char* p; 
    char* q; 
     
    char* test() 
    { 
    p='x'; 
    q='y'; 
    char y='y'; 
    return 0; 
    } 
     
    main (void) 
    { 
    tab[0]='a'; 
    tab[1]='b'; 
    p=&tab[0]; 
    q=&tab[1]; 
    test(); 
    printf("%c|%c",tab[0],tab[1]); 
    return 0; 
    }
    merci d'avance

  2. #2
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    Qu 'est ce que tu veux faire au juste ?

    je voudrais creer une fonction en C
    qui modifie 2 variables a travers de pointeurs

    seulement cette fonction ne modifie pas les variables

  3. #3
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    Si tu veux affecter de nouvelles valeurs à tab étant donné qu'il est déclré en globale, il te suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void test(void)
    {
    tab[0]='x';
    tab[1]='y';
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 22
    Par défaut
    en fait au depart j'ai deux matrices char 3x3 ke je dois envoyer dans une fonction pour ensuite renvoyer deux valeurs type char.

    au debut j'essayais de renvoyer plusieurs variables, ce qui ne marchait pas

    ensuite j'ai essaye de renvoyer un tableau char[2] ce qui doit etre faisable mais je n'ai pas reussi

    donc je me suis dit que peut etre en declarant les 2 char dans main et les modifier depuis la fonction avec des pointeurs mais je n'y arrive pas non plus

    svp propose moi une solution

    merci pour ta reponse

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 22
    Par défaut
    super ca marche

    et si je me limitais a declarer tab dans mon main() et pas en global comment je ferais?

    merci en tou cas

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 22
    Par défaut
    en fait si ca tinterresse voila le code de mon programme :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    #include <stdlib.h>
    #include <stdio.h>
    #include "fonctions.c"
    //--------------------------------------
     
    int main(int argc,char*argv[]) {
    //Arguments d'entree//
         int i=0;
         int j=0;
         printf("Parametres d'entree : ");
         printf("argc =%d\n\n",argc);
     
         for (i=0;i<argc;i++){
                 printf("argv[%d]=%s\n",i,argv[i]);
         }
         printf("\n");
    //-------------------------------------------------------
    //recuperation du puzzle de depart//
         char matrix1[TAILLE_1][TAILLE_1];
         for (i=0;i<TAILLE_1;i++){
                 for (j=0;j<TAILLE_1;j++){
                         matrix1[i][j]=argv[1][i*TAILLE_1+j];
                 }
        }
    //-------------------------------------------------------
    //affichage du puzzle de depart//
        printf("Puzzle de depart : \n");
        for(i=0; i<TAILLE_1; i++) {
                for(j=0; j<TAILLE_1; j++){
                        printf("%c ", matrix1[i][j]);
                }
                printf("\n");
        }
    //-------------------------------------------------------
    //recuperation du puzzle d'arrivee//
        char matrix2[TAILLE_1][TAILLE_1];
        for (i=0;i<TAILLE_1;i++){
                for (j=0;j<TAILLE_1;j++){
                        matrix2[i][j]=argv[2][i*TAILLE_1+j];
                }
        }
    //-------------------------------------------------------
    //affichage du puzzle d'arrivee//
        printf("Puzzle d'arrivee : \n");
        for(i=0; i<TAILLE_1; i++){
                for(j=0; j<TAILLE_1; j++){
                        printf("%c ", matrix2[i][j]);
                }
                printf("\n");
        }
    //-------------------------------------------------------
    //comparaison des deux matrices//
        char temp1[TAILLE_2];
        char temp2[TAILLE_2];
        short c=0;
        for(i=0;i<TAILLE_1;i++){
                for(j=0; j<TAILLE_1; j++){
                        temp1[i*TAILLE_1+j]=matrix1[i][j];
                        temp2[i*TAILLE_1+j]=matrix2[i][j];
                }
        }
        for (i=0; i<TAILLE_2; i++){
                for (j=0; j<TAILLE_2; j++){
                        if (temp1[i]==temp2[j]){
                                c++;
                        }
                }
        }
        if (c<TAILLE_2){
                printf("les 2 matrices ne contiennent pas les memes elements");
        }else{
    //-------------------------------------------------------
    //Calcul des erreurs//
           int errtot;
           errtot=calcul_erreur(matrix1,matrix2);
           printf("total erreurs : %d",errtot);
    //---------------------------------------------------------
    //Choix aleatoire d'un element a deplacer
          int m=0;
          char direction;
          int k;
          int l;
          while (m==0){
              k=r();
           sleep(SUP);
              l=r();
           if (matrix1[k][l]==SP)
           {
                   m=0;
           }
              else if (matrix1[k+1][l]==SP && k+1<TAILLE_1)
              {
                      m=1;
                      direction='b';
              }
              else if (matrix1[k-1][l]==SP && k-1>0)
              {
                      m=1;
                      direction='h';
              }
              else if (matrix1[k][l+1]==SP && l+1<TAILLE_1){
                      m=1;
                      direction='d';
              }
              else if (matrix1[k][l-1]==SP && l-1>0){
                      m=1;
                      direction='g';
              }
              else{
                      m=0;
              }
          }
          printf("lettre aleatoire : %c",matrix1[k][l]);
           printf("coords : %d | %d \n",k,l);
          printf("\ndeplacable a : %c",direction);
           }
    //--------------------------------------
     
        printf("fin\n");
        return 0;
    }
    et donc le choix aleatoire d'une lettre a deplacer j'aimerais transformer ca en une fonction a lakel jenvoi matrix1 et matrix2 et je recupere la lettre et la direction

  7. #7
    Expert confirmé

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Par défaut
    Voici un petit exemple qui te change la valeur d'une variable à l'aide de pointeur:
    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
    #include<stdio.h>
     
    void changeVal(int *pointeurSurVar);
     
    int main(void)
    {
        int nombre = 5;
     
        changeVal(&nombre); /* On envoie l'adresse de nombre à la fonction */
        printf("%d", nombre); /* On affiche la variable nombre. La fonction a directement modifié la valeur de la variable car elle connaissait son adresse */
     
        return 0;
    }
     
    void changeVal(int *pointeurSurVar)
    {
        *pointeurSurVar = 10; /* On affecte la valeur 10 à la variable nombre */
    }

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 22
    Par défaut
    ok snake je compren maintnan

    alors eske jpeu envoyer dans cette fonction la matrice matrix1 plus deux pointeurs (lettre et direction)

    car au final je veux recuperer les deux char lettre(matrix1[k][l]) et direction
    en utilisant cette matrice

    merci pour vos reponses c super

  9. #9
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    Si tu veux declarer ton "tab" dans le main tu peux:
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
     
     
    void test(char tab[])
    {
    tab[0]='x';
    tab[1]='y';
    }
     
    int main (void)
    {
    char tab[2];
     
    tab[0]='a';
    tab[1]='b';
     
    printf("%c|%c\n",tab[0],tab[1]);
     
    test(tab);
     
    printf("%c|%c\n",tab[0],tab[1]);
     
    return 0;
    }

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

Discussions similaires

  1. Passage de tableau à une fonction par pointeur
    Par progfou dans le forum C++
    Réponses: 15
    Dernier message: 23/02/2007, 11h45
  2. Fonction et pointeur
    Par Flophx dans le forum C
    Réponses: 14
    Dernier message: 22/02/2007, 17h29
  3. Réponses: 8
    Dernier message: 10/03/2006, 17h28
  4. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  5. Réponses: 10
    Dernier message: 03/02/2005, 13h09

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