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 :

Quel est le type de cette variable? (C -> C++ )


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut Quel est le type de cette variable? (C -> C++ )
    Je cherche à convertir ça en C++:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int *neigh = (int *)malloc(n * sizeof(int)), nn;
    Je vois bien qu'il y a un std::vector<int> neigh(n);, mais je ne comprends pas ce que fait le nn, ni quel est son type. Ca ressemble à un integer, parce que dans la suite du code, on trouve des choses comme:
    • nn = 0;
    • if(j< nn)
    • nn++

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 768
    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 768
    Par défaut
    Citation Envoyé par Seabirds Voir le message
    Ca ressemble à un integer
    C'est la base du C la variable nn est de type int.

    On utilise l'opérateur virgule pour chaîner les définitions des variables exemple : int x, y, z;.
    Mais dans 1 définition est inclus l'initialisation int x=25, y, z=82;.

    Les variables pointeurs sont assez "vicieuses" parce que l'étoile n'affecte que la variable concernée, mais le type affecte toute la chaîne des définitions.
    C'est pour cela que certains préfèrent "coller" l'étoile à la variable concernée (int *x;) et non au type (int* x;).

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 150
    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 150
    Billets dans le blog
    4
    Par défaut
    Vu que c'est assigné à un int*, nn est forcément un int*.
    Quant au code, il est juste immonde et génère rien d'autre qu'une fuite mémoire.
    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.

  4. #4
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut
    Aaaah bah décidez-vous les copains! int ou int* ?
    Oui oui, on est bien d'accord, c'est pas du joli code ahahah. Mais je fait le ménage et propage la bonne parole du C++ moderne, t'en fais pas

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 150
    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 150
    Billets dans le blog
    4
    Par défaut
    Ce seul code est ambigu sans contexte.
    Soit c'est l'opérateur , donc tout est exécuté et seule la dernière valeur est assignée, donc ça fait le malloc, puis assign nn, donc nn doit être un int* précédemment déclaré, et le malloc est une fuite mémoire.
    Soit la, est juste un délimiteur et c'est une déclaration de neigh comme int* auquel on assigne le malloc et la déclaration de nn comme int non initialisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nn = 0;
    if(j< nn)
    nn++
    Rien de tout ça n'est interdit sur des pointeurs.
    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.

  6. #6
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut
    Oh mon dieu, mais c'est vraiment vraiment immonde alors!
    Donc de ce que je vois du code, nn n'a jamais été déclarée (ni vers un int, ni vers un *int. Donc c'est ta deuxième option qui l'emporte.
    C'est vrai que ça coute super cher en encre de taper int nn = 0; !

  7. #7
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 768
    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 768
    Par défaut
    Citation Envoyé par Seabirds Voir le message
    C'est vrai que ça coute super cher en encre de taper int nn = 0; !
    C'est 1 peu stupide ce que tu dis

    Chaîner les définitions cela permet de réduire la taille des blocs des définitions. Alors certes en C++, on peut définir 1 variable n'importe quand.
    Mais ce n'est pas le cas avant le C99 qui oblige de définir en début de bloc.

    Après définir 1 pointeur et 1 variable normale en même temps, ce n'est pas vraiment approprié (parce qu'en définitive ce n'est pas le même type).
    En tout cas, ton debugger/ compilateur (avec 1 printf par exemple) devrait te dire les types.

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

Discussions similaires

  1. Quel est le principe de cette technologie
    Par epock29 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/03/2007, 09h54
  2. quel est le type pour une image?
    Par kitiara999 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 06/12/2006, 18h07
  3. [Conception] quel est le type de variable a choisir?
    Par King_T dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/05/2006, 00h27
  4. Quel est le type retourné ?
    Par Rupella dans le forum C
    Réponses: 4
    Dernier message: 30/11/2005, 14h01
  5. [langage] "@$" Quel est ce type de variable?
    Par YanK dans le forum Langage
    Réponses: 4
    Dernier message: 21/04/2005, 18h07

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