En aquest fragment de codi (char c = 'a'; const char * p1 = & c; char * const p2 = & c;) quina és la diferència entre el que fa p1 i p2 i quina és la funció de l'estrella (*) en ambdós casos?


Resposta 1:

const char * significa que no es pot canviar el valor apuntat.

char * const significa que el punter en sí no es pot canviar.

Hi ha una tercera variació

const char * const ni es pot canviar el valor ni el punter.

#incloure 

int principal (buit)
{
char a = 'a';
char b = 'b';

const char * p1 = & a;
char * const p2 = & a;
const char * const p3 = & a;

printf ("a '% c' \ n", a);
printf ("p1% 08X '% c' \ n", p1, * p1);
    printf ("p2% 08X '% c' \ n", p2, * p2);
printf ("p3% 08X '% c' \ n", p3, * p3);

// * p1 = '1'; // error
* p2 = '2';
// * p3 = '3'; // error

p1 = & b;
// pb = & b; // error
// pc = & b; // error

printf ("a '% c' \ n", a);
printf ("p1% 08X '% c' \ n", p1, * p1);
    printf ("p2% 08X '% c' \ n", p2, * p2);
printf ("p3% 08X '% c' \ n", p3, * p3);
}