[debutant] Problème de pointeur
Bonjour je desire modifié un entier u initialisé à 0 à l'aide d'une fonction modifu
la voici :
Code:
1 2 3 4 5
|
void modifu( void*p)
{
u = (int)p; // u est static
} |
l'appel de modifu se fait de deux facons:
En passant en paramètres un void*n
1ere facon:
Code:
1 2 3 4
|
int val = 990088;
void *n = (void*)&val;
modifu(n); |
2eme facon:
Code:
1 2 3 4
|
int val = 990088;
void *n = (void*)val; //plus de &
modifu(n); |
Voila!
Peut etre vous l'aurez deja deviné mais la premiere facon ne marche pas
Par contre la seconde marche.
(Dans la premiere u vaut une variable "bizarre")
Le truc c'est qu'en utilisant la facon 2 j'ai 2 warning qui me dérange
Les warning C4047 et C4312
Citation:
C4047: int diffère de void* dans différents niveaux d'indirections
et
C4312: cast de type conversion de int en void* de taille supérieure
Voilà !!
Comment puis je faire pour ne plus avoir ces warning !! (je ne veux bien sur par modifié modifu(void*) et modifu(int)
Ce serait sympa de me répondre...
Re: [debutant] Problème de pointeur
Citation:
Envoyé par x
Code:
1 2 3 4 5
|
void modifu( void*p)
{
u = (int)p; // u est static
} |
en supposant que on u soit un static int : tu as oublié de déreférencer le pointeur :
Code:
1 2 3 4 5
|
void modifu( void*p)
{
u = (int)*p; // dereferencement avec * pour mettre la valeur de p dans u et non sont adresse
} |
maintenant l'explication de pourquoi ta méthode 2 marche :
en soit un pointeur à la même taille qu'un int sur la majorité des système, donc tu peux passer une valeur de int dans un pointeur (ce que tu fait là).
Du coup avec l'oublis du déréférencement dans la méthode tu obtenais le bon résultat.
en déréférencant tu devrais avoir la methode 1 correct et la deuxième qui ne "marche plus"
Re: [debutant] Problème de pointeur
Citation:
Envoyé par lakitrid
Code:
1 2 3 4 5
|
void modifu( void*p)
{
u = (int)*p; // dereferencement avec * pour mettre la valeur de p dans u et non sont adresse
} |
Hmmm, ceci me plaît plus:
Code:
1 2 3 4 5
|
void modifu( void*p)
{
u = *((int *) p); // dereferencement avec * pour mettre la valeur de p dans u et non sont adresse
} |
Re: [debutant] Problème de pointeur
Citation:
Envoyé par fearyourself
Citation:
Envoyé par lakitrid
Code:
1 2 3 4 5
|
void modifu( void*p)
{
u = (int)*p; // dereferencement avec * pour mettre la valeur de p dans u et non sont adresse
} |
Hmmm, ceci me plaît plus:
Code:
1 2 3 4 5
|
void modifu( void*p)
{
u = *((int *) p); // dereferencement avec * pour mettre la valeur de p dans u et non sont adresse
} |
C'est parfait !!!
(la premiere méthode proposé que j'avais essayé entraine l'erreur C2100: indirection non comforme !)
en tout cas merci...
Re: [debutant] Problème de pointeur
Citation:
Envoyé par fearyourself
Hmmm, ceci me plaît plus:
Code:
1 2 3 4 5
|
void modifu( void*p)
{
u = *((int *) p); // dereferencement avec * pour mettre la valeur de p dans u et non sont adresse
} |
Je comprend :)
d'un autre coté j'ai pas fait de C depuis 2 ans :)