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 :

pointeur dans une fonction !


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 105
    Par défaut pointeur dans une fonction !
    bonjour tous le monde
    j'ai essaye d’écrire un programme qui compte les nombres des zéros dans une matrice
    le problème quand je passe un tableau statique dans la fonction le compilateur me déclare un erreur

    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
    #include<iostream>
    #include <cstdlib>
    using namespace std;
     
    void nombredesZero(int **A)
    {
        int n = 0;
     
        for (int j = 0; j < 4; j++)
        {
            for (int i = 0; i < 4; i++)
            {
                if (A[i][j] == 0)
                {
                    n++;
                }
            }
            cout << "Nombres Des Zeros Pour la Colonne n°" << j << "est: " << n << endl;
     
        }
    }
     
    int main()
    {
     
        int **A;
        int t[4][4] = { { 0, 1, 2, 3 }, { 0, 2, 3, 5 }, { 0, 1, 4, 0 }, { 0, 0, 0, 2 } };
        A = new int*[4];
        for (int i = 0; i < 4; i++)
        {
            A[i] = new int[4];
            for (int j = 0; j < 4; j++)
            {
                cout << "Donner A[" << i + 1 << "][" << j + 1 << "]" << endl;
                cin >> A[i][j];
            }
        }
        system("cls");
        cout << "\n affichage" << endl;
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                cout << A[i][j] << "\t";
            }
            cout << "\n";
        }
        nombredesZero(A);
        nombredesZero(t); // le probleme ici :(
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 112
    Billets dans le blog
    147
    Par défaut
    Bonjour,

    Quelle erreur ?

    De ce que j'ai vu, t est un nombre (int) et la fonction attend de recevoir un pointeur sur un pointeur sur un int. Du coup, les deux ne sont pas pareils, du coup, le compilateur n'aime pas et vous le dit.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Pour info, l'erreur avec MinGW est :
    error: cannot convert 'int (*)[4]' to 'int**' for argument '1' to 'void nombredesZero(int**)'


    Quand je vois le corps de la fonction de comptage des zéros, je me demande pourquoi son prototype n'est pas comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void nombredesZero(int A[4][4]);

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Un pointeur n'est pas un tableau, et vice versa.
    Le nom d'un tableau est convertible en pointeur vers son premier élément.

    Dans ton code t est un tableau de tableau. Son nom est convertible en pointeur de tableau. Mais un pointeur de tableau n'est pas un pointeur de pointeur.
    C'est précisément ce que te dis ton compilateur: impossible de convertir un pointeur de tableau (int (*)[4]) en pointeur de pointeur d'entier (int **)

    Donc, comme le dit Bktero, tu devrais changer le type d'argument de la fonction.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Hello

    t est bien un tableau de tableaux. Un tableau à une dimension peut être converti en pointeur. Mais un tableau à deux dimensions ne peut pas être converti en pointeur de pointeur.

    La première chose à faire lorsqu'on utilise des matrices c'est justement d'éviter la double dimension.

    De plus, lorsqu'on manipule des pointeurs, il faut trimbaler les tailles avec, et pas les mettre en dur dans le code. Voici du coup une version plus correcte du même 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 <cstdlib>
    #include <iostream>
     
    using namespace std;
     
    void nombredesZero(int *A, size_t nb_cols, size_t nb_rows) {
      size_t n = 0;
      for (size_t j = 0; j < nb_cols; ++j) {
        size_t n_this_col = 0;
        for (int i = 0; i < nb_rows; ++i) {
          if (A[j*nb_rows+i] == 0) {
            ++n_this_col;
          }
        }
        cout << "Nombres Des Zeros Pour la Colonne n°" << j << " est: " << n_this_col << "\n";
        n += n_this_col;
      }
     
      cout << "Nombre total de Zeros: " << n << "\n";
    }
     
    int main() {
      int t[4*4] = {0, 1, 2, 3, 0, 2, 3, 5, 0, 1, 4, 0, 0, 0, 0, 2};
      nombredesZero(t,4,4);
    }

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    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.

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

Discussions similaires

  1. passage de pointeur dans une fonction
    Par El Manco dans le forum Débuter
    Réponses: 10
    Dernier message: 09/02/2009, 22h13
  2. Modification de pointeurs dans une fonction
    Par bluemartini dans le forum Débuter
    Réponses: 4
    Dernier message: 26/09/2008, 10h23
  3. Modifier le contenu de pointeurs dans une fonction
    Par Sol_Invictus dans le forum Débuter
    Réponses: 6
    Dernier message: 11/09/2008, 23h30
  4. Pointeur dans une fonction ?
    Par sliiim6184 dans le forum C
    Réponses: 4
    Dernier message: 28/12/2006, 11h32
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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