# Probleme pointeurs en C



## Coolsinus (18 Septembre 2010)

Salut a tous,

 je suis en train de relire pour une 3 eme fois la page pointeurs du site du zero (http://www.siteduzero.com/tutoriel-3-14005-a-l-assaut-des-pointeurs.html) et j'ai un petit probleme : Quand ils me disent que je peut voir l'adresse d'une variable (age), en hexadecimal ca marche, mais des lorsque je le veut en decimal (je remplace "%p" par "%d"), la console m'affiche ce nombre : -1073744024 (celui que la console m'affiche lorsque il y a, un petit probleme...).

Regardez : 


```
#include <stdio.h>
#include <stdlib.h>



int main (int argc, const char * argv[]) 
{
	
	
	int age = 10;
	int *pointeurSurAge = &age;
	printf("La valeur de pointeurSurAge est l'adresse de la variable age : %d \n", pointeurSurAge);
	
	// ou 
	
	printf("L'adresse de age est : %d \n", &age); /* C'est donne le meme resultat,
	                                            soit l'adresse de age, cepandant
	                                            ca n'affiche pas le chiffre correcte :
	                                            -1073744024 (c'est tout le temps le chiffre 
	                                            que j'ai lorsqu'il y a une erreur !) */
	
	// par contre en exadecimal ca marche : 
	
	printf("L'adresse de age en exadecimal : %p \n", &age);
	
	
	return 0;
}
```


et voici ce que la console affiche : 


```
[Session started at 2010-09-18 11:59:26 +0200.]
La valeur de pointeurSurAge est l'adresse de la variable age : -1073744024 
L'adresse de age est : -1073744024 
L'adresse de age en exadecimal : 0xbffff768 

The Debugger has exited with status 0.
```

Pouvez-vous me dire ce que je fais de mal.
Merci d'avance !


----------



## eNeos (18 Septembre 2010)

'lut

0xbffff768 = 3 221 223 272
%d => entier signé => -2 147 483 648 à 2 147 483 647

Tu demandes l'affichage un nombre entier signé supérieur aux limites possibles.  Remplace le %d (entier signé) par %u (entier non signé), ça devrait mieux fonctionner.


----------



## Coolsinus (18 Septembre 2010)

Merci beaucoup ! Tout marche et j'ai bien compris grace ton explication !


----------



## Coolsinus (18 Septembre 2010)

Tant que j'y suis, est-ce que quelqu'un sait comment changer la police de Xcode ? Car la police actuelle de Xcode est "Courier" je crois et je voudrais en avoir une autre tel que "Comic Sans MS"...

Merci d'avance !


----------



## tatouille (20 Septembre 2010)

*(int32_t *)pointerOnAge , l'age est 10, afficher l'adresse du pointer n'a ni queue ni tete, ce que tu recherches c'est  retrouver la valeur contenue dans la variable pointée ce que le tutoriel du zero explique tres bien. eNeos, ta reponse n'a ni queue ni tete, essaye de comprendre ce qu'il n'a visiblement pas compris.


----------



## eNeos (20 Septembre 2010)

&age n'est pas censé être l'adresse de age ? :mouais:
Une adresse étant rarement négative, il ne me semble donc pas inopportun de l'afficher en entier non signé.


> printf("L'adresse de age est : %u \n", &age);


 ne m'écorche donc pas les yeux, du moment que le souhait est bien d'afficher l'adresse à laquelle est stockée la valeur de l'âge, ce qui semble être le cas ici :


> Quand ils me disent que je peut voir l'adresse d'une variable (age)



Cela dit, le C ça fait 20 ans que je ne pratique plus. J'ai surement oublié certaines choses.


----------



## Nyx0uf (20 Septembre 2010)

> Tant que j'y suis, est-ce que quelqu'un sait comment changer la police de Xcode ? Car la police actuelle de Xcode est "Courier" je crois et je voudrais en avoir une autre tel que "Comic Sans MS"...



Dans les préférences de XCode, à tout hasard..?



> *(int32_t *)pointerOnAge, l'age est 10, afficher l'adresse du pointer n'a ni queue ni tete, ce que tu recherches c'est retrouver la valeur contenue dans la variable pointée ce que le tutoriel du zero explique tres bien. eNeos, ta reponse n'a ni queue ni tete, essaye de comprendre ce qu'il n'a visiblement pas compris.



D'après ce que Coolsinus dit, c'est bien l'adresse qu'il veut afficher, c'est sûr que l'intérêt est limité...  Mais bon du coup mettre un _%u_ comme le suggère eNeos règle son problème.


----------



## tatouille (20 Septembre 2010)

eNeos a dit:


> &age n'est pas censé être l'adresse de age ? :mouais:
> Une adresse étant rarement négative, il ne me semble donc pas inopportun de l'afficher en entier non signé.
> ne m'écorche donc pas les yeux, du moment que le souhait est bien d'afficher l'adresse à laquelle est stockée la valeur de l'âge, ce qui semble être le cas ici :
> 
> ...



le commentaire n'est pas a propos d'afficher la valeur long formattée unsigned, je ne vois pas l'interet d'afficher la valeur decimal d'une adresse incrementale, deplus j'ai relu l'auteur et c'est pas jojo:

"Si vous remplacez le %p par un %d, vous devriez obtenir le nombre en système décimal (plus compréhensible pour nous pauvres humains). Toutefois, le %p a été fait spécialement pour afficher des adresses, donc je préfère en général l'utiliser à la place de %d."

c'est du grand n'importe quoi, "plus compréhensible pour nous pauvres humains" oui pour les debiles qui n'ont jamais fait l'effort d'apprendre leur table et capable de convertir en lisant.

je ne sais pas comment il fait quand le "debugger output des int64 ou size_t pour les valeurs unsigned (en format hexa)", pour debugger...

et a la fin qu'es-ce que ca vient foutre dans un tutorial sur les pointers ou le principe et de comprendre la relation entre une adresse et le stockage memoire reel.

quand meme le point final c'est de pouvoir passer par reference des valeurs a d'autres objets et que je peux avoir 200 adresses pointant sur le meme espace memoire, sans etre oblige de copier puis d'ecraser.


----------



## Coolsinus (20 Septembre 2010)

tatouille a dit:


> *(int32_t *)pointerOnAge , l'age est 10, afficher l'adresse du pointer n'a ni queue ni tete, ce que tu recherches c'est  retrouver la valeur contenue dans la variable pointée ce que le tutoriel du zero explique tres bien. eNeos, ta reponse n'a ni queue ni tete, essaye de comprendre ce qu'il n'a visiblement pas compris.



Tatouille, c'est toi qui ne comprend rien ! eNeos ma donne la reponse a la question que j'ai pose ( qui etait de pouvoir afficher la valeur decimal de l'adresse de la *variable*).



> Dans les préférences de XCode, à tout hasard..?



Autrement j'ai chercher dans les preferences et je ne trouve pas...quelqu'un sait pour modifier la police de Xcode ?


----------



## Nyx0uf (20 Septembre 2010)

Alors dans préférences, section Fonts & Colors, on ne peut pas faire plus simple...

Je pense que Tatouille à très bien compris, ce qu'il dit c'est que c'est totalement inutile de vouloir afficher une adresse mémoire en décimal et il a parfaitement raison.


----------



## eNeos (20 Septembre 2010)

tatouille a dit:


> le commentaire n'est pas a propos d'afficher la valeur long formattée unsigned, je ne vois pas l'interet d'afficher la valeur decimal d'une adresse incrementale, deplus j'ai relu l'auteur et c'est pas jojo:
> 
> <...>
> 
> quand meme le point final c'est de pouvoir passer par reference des valeurs a d'autres objets et que je peux avoir 200 adresses pointant sur le meme espace memoire, sans etre oblige de copier puis d'ecraser.


Vi, j'suis d'accord avec toi. Mais je me souviens également du jour où j'ai découvert adresses et pointeurs, il y a 20 ans. La première chose que j'ai faite était d'afficher l'adresse de ma variable et j'étais super fier de moi... Et je serais surpris que je sois le seul à avoir fait ça 

Maintenant, je suis certain que dans quelques semaines, Coolsinus se cassera la tête à pointer des listes chainées, etc. Comme "nous tous" en somme.


----------

