POinteur or not pointeur....

chaps31chaps31 Membre
avril 2008 modifié dans API AppKit #1
Dites-moi si j'ai juste (et si je flood avec tous mes messages...) :
J'ai découvert un truc bizzare, lorsque j'utilise des NSString je ne me pose pas de question, je déclare des pointeur NSString (NSString *) dans mes arguments de méthodes ou NSString *machaine dans le code, puis utilise la variable via son nom tout bêtement et j'obtiens la valeur.
Par contre avec les nombres tout change, je déclare un pointeur vers un integer  (int *) dans mes arguments de méthode mais un int *unentier dans le code ne fonctionne pas il faut que je déclare int unentier, et donc si je veux récupérer l'adresse du pointeur il ne faut pas que j'oubli le & .

C'est bizarre je ne peux pas déclarer dans mon code un nombre en déclarant un pointeur ? genre int *unentier, car il me dit alors "warning:initialization makes pointer from integer without a cast", je ne peux déclarer que sa valeur puis éventuellement travailler avec le pointeur par la suite avec &... Tout ça vient peut être du fait que NSString est une classe et pas int ou float...

CA vous inspire ma réflexion ?

Réponses

  • schlumschlum Membre
    16:56 modifié #2
    dans 1207129706:

    Dites-moi si j'ai juste (et si je flood avec tous mes messages...) :
    J'


    Ouais, tout bon  :o :)
  • chaps31chaps31 Membre
    16:56 modifié #3
    :o ;D
  • schlumschlum Membre
    16:56 modifié #4
    int et float ce sont des types C de base...

    int *entier = (int*)malloc(sizeof(int));<br />// ...<br />free(entier);
    
  • LeChatNoirLeChatNoir Membre, Modérateur
    16:56 modifié #5
    Comme tu l'aauras remarqué, NSString se déclare "NSString *".
    L'étoile confirme que c'est un pointeur.

    Donc pour faire pareil avec un entier, pas de pb : int * mais il faut alors faire l'équivalent d'un alloc que tu fais par un moyen ou un autre sur ton NSString.

    Ce que t'as expliqué Schlum (en C, alloc = malloc).

    A+
  • Philippe49Philippe49 Membre
    16:56 modifié #6
    dans 1207129706:

    Par contre avec les nombres tout change, je déclare un pointeur vers un integer  (int *) dans mes arguments de méthode mais un int *unentier dans le code ne fonctionne pas il faut que je déclare int unentier, et donc si je veux récupérer l'adresse du pointeur il ne faut pas que j'oubli le & .

    C'est bizarre je ne peux pas déclarer dans mon code un nombre en déclarant un pointeur ? genre int *unentier, car il me dit alors "warning:initialization makes pointer from integer without a cast",


    Une déclaration int N; prépare en mémoire une zone de 4 octets dans laquelle on peut stocker une valeur  par N=12;

    Une déclaration int * address; prépare en mémoire une zone de 4 octets susceptible de recevoir l'adresse d'un entier.
    par exemple
    int N;
    N=12;
    int * address;
    address=&N;

    fait que le contenu de la variable address est l'adresse en mémoire de N

    et le contenu de N peut être obtenu par *address ou address[0]
    printf("%d\n",*address)
    écrit la valeur 12.


    dans 1207129706:

    Tout ça vient peut être du fait que NSString est une classe et pas int ou float...
    CA vous inspire ma réflexion ?

    Une instance donne effectivement une référence = un pointeur = une adresse sur une zone mémoire contenant les infos de cette instance.
  • Philippe49Philippe49 Membre
    16:56 modifié #7
    dans 1207131816:

    int *entier = (int*)malloc(sizeof(int));


    le (int*) devant malloc n'est là  que pour mémoire dans certains styles de programmation.
    En effet malloc renvoie un (void*). le cast est alors automatique.
  • chaps31chaps31 Membre
    16:56 modifié #8
    Merci à  tous :p
  • schlumschlum Membre
    16:56 modifié #9
    dans 1207138251:

    Une déclaration int N; prépare en mémoire une zone de 4 octets dans laquelle on peut stocker une valeur  par N=12;


    Tu t'avances beaucoup en disant " 4 "  :P

    2 en LP32
    4 en ILP32, LLP64, LP64
    8 en ILP64
    :o

    Une déclaration int * address; prépare en mémoire une zone de 4 octets susceptible de recevoir l'adresse d'un entier.


    Pareil...

    4 en LP32, ILP32
    8 en ILP64, LLP64, LP64
  • Philippe49Philippe49 Membre
    16:56 modifié #10
    dans 1207142709:

    Tu t'avances beaucoup en disant " 4 "  :P

    Yes.
  • chaps31chaps31 Membre
    16:56 modifié #11
    Incroyable, lorsque des codeurs discutent entre eux dans leurs phrases il y a plus de chiffres que de lettres.  :)
  • schlumschlum Membre
    16:56 modifié #12
    Ouais, et souvent des puissances de 2 bizarrement  :P
Connectez-vous ou Inscrivez-vous pour répondre.