C/C++ (void*) 0

Inscrit
15 Avril 2011
Messages
457
Reactions
1
#1
Ce topic n'a rien à voir avec un bot, j'ai lu ça dans mon cours de C. J'aurais pu poser cette question sur un site spécialisé, mais c'est pas plus mal de faire un peu perdurer Cadernis.

J'ai cette ligne :
Code:
int *p=(void*) 0;
D'après ce que j'ai lu ailleurs, ça permet de déclarer un pointeur qui pointe sur NULL. Mais étant donné, que NULL n'existe pas en C, on fait comme ça. Ce que je me demande, c'est à quoi sert le cast en pointeur générique ?!


Autre question en rapport, si j'écris ça :
Code:
int *p=10;
C'est-à-dire que je déclare un pointeur et qu'en même temps, je le définis sur un entier seul. Cela veut dire que mon pointeur va pointer sur la case mémoire 0x000010 ?
 

Geraff

Administrateur
Membre du personnel
Inscrit
13 Mars 2008
Messages
564
Reactions
0
#2
1 ) Je ne saurai te répondre en étant 100% sur. Ce que je peux te dire c'est que void* est utilisé pour déclarer un pointeur générique car la valeur stcoké en mémoire ne sera pas caster en un certain type. Toutefois si on veut faire un pointeur générique il faut lui donner une adresse sur laquelle pointer et c'est comme ça qu'on fait.

2) oui tu vas pointer sur l'adresse 10.

Tu peux aussi faire un pointeur sur un tableau et quand tu fera *p++ tu passera à la case suivante.
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#3
Hum j'ai quand même du mal à comprendre à quoi sert le void*. Pourquoi on ne met pas tout simplement "int *p=0;" comme en C++ ?
 
Inscrit
5 Decembre 2010
Messages
114
Reactions
0
#4
NULL existe en C il faut juste inclure la bonne librairie (ou .h).
A mon avis le (void *) est utilisé pour dire a *p de ne pas prendre l'adresse 0 mais bien la valeur 0 donc NULL. Car en C un tableau de int (int *), contrairement à un string (char * ou chaine de caractère), ne possède pas de caractère de fin de tableau, '\0' pour un char *.
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#5
Merci pour ta réponse. Mais quel est le rapport avec le caractère \0 ? ^^
 
Haut Bas