57 votes

Comment attribuer manuellement une adresse de pointeur en langage de programmation C?

Comment attribuer manuellement une adresse de pointeur (par exemple à l'adresse mémoire 0x28ff44 ) dans le langage de programmation C ?

86voto

T.J. Crowder Points 285826

Comme ça:

 void * p = (void *)0x28ff44;

Ou si vous le voulez en char * :

 char * p = (char *)0x28ff44;

...etc.

Si vous indiquez quelque chose que vous n'êtes vraiment pas censé changer, ajoutez un const :

 const void * p = (const void *)0x28ff44;
const char * p = (const char *)0x28ff44;

... puisque je pense que cela doit être une sorte d'"adresse bien connue" et celles-ci sont généralement (mais pas toujours) en lecture seule.

10voto

zsalzbank Points 5698

Votre code serait comme ceci :

 int *p = (int *)0x28ff44;

int doit être le type de l'objet que vous référencez ou il peut s'agir de void .

Mais faites attention à ne pas essayer d'accéder à quelque chose qui n'appartient pas à votre programme.

5voto

kamal Points 51
int *p=(int *)0x1234 = 10; //0x1234 is the memory address and value 10 is assigned in that address


unsigned int *ptr=(unsigned int *)0x903jf = 20;//0x903j is memory address and value 20 is assigned 

Fondamentalement, dans la plate-forme embarquée, nous utilisons directement des adresses au lieu de noms

0voto

Yasir Points 33

disons que vous voulez qu'un pointeur pointe sur l'adresse 0x28ff4402, la manière habituelle est

 uint32_t *ptr;
ptr = (uint32_t*) 0x28ff4402 //type-casting the address value to uint32_t pointer
*ptr |= (1<<13) | (1<<10); //access the address how ever you want

Donc le plus court est d'utiliser une MACRO,

 #define ptr *(uint32_t *) (0x28ff4402)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X