pourquoi (int*) avant un malloc pour un entier
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

pourquoi (int*) avant un malloc pour un entier



  1. #1
    invite7ade7f5a

    Post pourquoi (int*) avant un malloc pour un entier


    ------

    bonsoir tout le monde
    en cherchant sur internet des cours pour langage c je tombe sur deux version différentes il y'en a qui écrivent (pour allocation de mémoire pour un pointeur a de type int) a=malloc(sizeof(int)); et les autres : a=(int*)malloc(sizeof(int));
    je sais que normalement en utilise (int*) ou (char*) ou autre pour forcer le genre mais je sais pas a quoi peux servir pour un malloc
    merci beaucoup pour vos réponses

    -----

  2. #2
    Jack
    Modérateur

    Re : pourquoi (int*) avant un malloc pour un entier

    Tu as du reprendre des exemples de code pour du C++ qui est beaucoup plus strict au niveau du typage. A ma connaissance, ce transtypage n'est pas obligatoire en C avec malloc.

  3. #3
    invite7ade7f5a

    Re : pourquoi (int*) avant un malloc pour un entier

    bonsoir merci pour votre réponse,
    pourquoi transtyper une adresse?,normalement malloc alloue renvoi l'adresse de la mémoire alloué et on lui donne comme paramètre la taille de la mémoire qu'on veux en fonction du pointeur qu'on a déclaré

  4. #4
    Jack
    Modérateur

    Re : pourquoi (int*) avant un malloc pour un entier

    En C++, dans une affectation, les types doivent correspondre. Si tu fais un malloc sur un pointeur d'int, il faudra typer la valeur de retour du malloc en pointeur d'int. Pas question comme en C de prendre un pointeur générique (void*) pour faire de l'allocation dynamique.

  5. A voir en vidéo sur Futura
  6. #5
    inviteb9f49292

    Re : pourquoi (int*) avant un malloc pour un entier

    Citation Envoyé par Jack Voir le message
    Tu as du reprendre des exemples de code pour du C++ qui est beaucoup plus strict au niveau du typage. A ma connaissance, ce transtypage n'est pas obligatoire en C avec malloc.
    Si c'est un cours de C++ et ils devraient utiliser "malloc"

  7. #6
    Jack
    Modérateur

    Re : pourquoi (int*) avant un malloc pour un entier

    Citation Envoyé par lou_ibmix_xi Voir le message
    Si c'est un cours de C++ et ils devraient utiliser "malloc"
    Je ne suis pas bien ce que tu veux dire ... Que malloc est incongru en C++?

  8. #7
    Stan_94

    Re : pourquoi (int*) avant un malloc pour un entier

    Bonjour,
    je me lance surtout pour vérifier (donc merci à la communauté de confirmer ou d'infirmer) si moi même j'ai bien compris...
    Pour le C, si tu ajoute le casting (int*) avant l'allocation mémoire, tu forces "a" a pointer sur un type entier.
    Les 2 sont équivalents si pour la première version, "a" est d'abord déclaré comme ceci : int * a;
    Sans ça, si le "a" était déclaré comme ceci par exemple : void * a; alors "a" pourrait pointer sur autre chose, tant que la taille soit celle d'un entier, par exemple 4 caractères sur un système 32 bits (1 int = 4 octets).
    Dernière modification par Stan_94 ; 26/02/2016 à 12h42.

  9. #8
    inviteb9f49292

    Re : pourquoi (int*) avant un malloc pour un entier

    Citation Envoyé par Jack Voir le message
    Je ne suis pas bien ce que tu veux dire ... Que malloc est incongru en C++?
    Oui (il fallait lire "Si c'est un cours de C++, ils de devraient _PAS_ utiliser malloc/free"). Je ne suis plus sûr, mais j'ai un vieux souvenir à cause des surcharge éventuelle de new / delete, et/ou peut être à cause des subtilités du genre constructeurs par défaut. Même si sur ce point précis je dis une connerie, de manière plus "scolaire", si on apprends le C++, on utilise l'API C++, pas celle du C.

  10. #9
    inviteb9f49292

    Re : pourquoi (int*) avant un malloc pour un entier

    Citation Envoyé par Stan_94 Voir le message
    Bonjour,
    je me lance surtout pour vérifier (donc merci à la communauté de confirmer ou d'infirmer) si moi même j'ai bien compris...
    Pour le C, si tu ajoute le casting (int*) avant l'allocation mémoire, tu forces "a" a pointer sur un type entier.
    Les 2 sont équivalents si pour la première version, "a" est d'abord déclaré comme ceci : int * a;
    Sans ça, si le "a" était déclaré comme ceci par exemple : void * a; alors "a" pourrait pointer sur autre chose, tant que la taille soit celle d'un entier, par exemple 4 caractères sur un système 32 bits (1 int = 4 octets).
    En C, caster la sortie de malloc est inutile puisque faite au moment de l'affectation de la sortie de malloc dans ta variable. Et il me semble même que c'est une habitude déconseillée dans l'industrie (mais si c'est le cas l'argument du pourquoi m'échappe). Si tu avais déclaré ta variable en void*, tu n'aurais pas pu faire d'arithmétique sur ton pointeur. En effet:
    Code:
    int n;
    int * pn = &n;
    pn ++;
    va incrémenter l'adresse pointée par pn du nombre d'octets encodant un entier (4 ou 8), c'est possible puisque le compilateur "sait" que c'est une adresse d'entier, et donc il sait calculer où se trouve la prochaine adresse. En revanche, si tu avais déclaré pn en "void*", le compilateur (je pense) doit péter une erreur sur le "pn++;" puisqu'il n'a aucun moyen de connaître la taille de ce que contient cette adresse. Dit autrement, le void* en C sert surtout pour déclarer une adresse dont on ne sait pas ce qu'elle contient.
    Et comme je répondais à Jack juste au-dessus, si tu fais du C++, tu ne dois pas utiliser malloc/free mais new/delete.
    Une dernière remarque: mon avis (partagé par pas mal de pro) est que le C++ est un vestige "historique", je le trouve peu pertinent dans l'informatique moderne, et je le déconseille encore plus comme langage d'apprentissage car il est beaucoup trop compliqué.

    Une blague qui traîne sur le C++ est:
    Que veut dire le 17 dans C++17 ?
    C'est le nombre de tentacules qu'ils ont ajoutés à la pieuvre pour la rendre utilisable...

Discussions similaires

  1. Pourquoi r est un entier ?
    Par invite414aeef9 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 28/12/2015, 19h10
  2. Comment démontrer que (110-x)/(1+9x) n'est jamais entier pour x entier positif
    Par invitea3f0770d dans le forum Mathématiques du supérieur
    Réponses: 17
    Dernier message: 03/07/2011, 10h31
  3. Pourquoi 2 ans avant de récolté la camomille?
    Par inviteedd12661 dans le forum Jardinage
    Réponses: 0
    Dernier message: 23/06/2010, 21h27
  4. Devellopper le produit d'entier d'un entier dans un intervalle
    Par invited872b3ac dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 29/11/2009, 11h06
  5. Pourquoi Zéro est-il considéré comme un entier Naturel ?
    Par invite6754323456711 dans le forum Epistémologie et Logique (archives)
    Réponses: 57
    Dernier message: 24/04/2009, 05h03