/ / wskaźnik do const i const wskaźnika do czegoś - c ++, wskaźniki, const

wskaźnik do const i const wskaźnik do czegoś - c ++, pointers, const

jaka jest różnica pomiędzy

const int d=1;
const int *p = &d;

i

const int d=1;
int const *p = &d;

Co mogę zrobić z pierwszym i drugim?

Odpowiedzi:

4 dla odpowiedzi № 1

Nie ma różnicy, są całkowicie identyczne.

Gramatyka języka po prostu pozwala napewna ilość swobody dla niektórych konstrukcji i kwalifikacja CV jest jedną z tych sytuacji. Istnieją inne przykłady (np. Deklaracje takie jak foo typedef int;).


0 dla odpowiedzi nr 2

const int *p;

Powyższa deklaracja deklaruje wskaźnik p wskazuje to na stałą int. Innymi słowy, możesz „zmienić wartość odwołania, ale możesz zmienić p samo.

int* const p;

Powyższa deklaracja deklaruje stały wskaźnik p to wskazuje na int. Innymi słowy, możesz zmienić wartość odwołania, ale nie możesz go zmienić p. Również,

const int d = 1;
int * const p = &d;

nie jest legalne. Biorąc adres d plony const int*i kowersja z const int* do int* jest niedozwolone (można niezamierzenie zmienić wartość stałego obiektu, jeśli taki był).

Możesz dokonać konwersji jawnie, używając const_cast:

const int d = 1;
int * const p = const_cast<int*>(&d);

ale wciąż byłoby nielegalne (niezdefiniowane zachowanie) zmiana wartości d przez p.


0 dla odpowiedzi № 3
const int *p;

p jest wskaźnikiem do stałej liczby całkowitej. Możesz zmienić wartość zapisaną w p (stąd wskazuje gdzie indziej), ale nie możesz zmienić wartości gdzie p punkty dla.

int* const p;

p jest stałym wskaźnikiem do niezmiennej liczby całkowitej. Nie możesz zmienić wartości p, ale zmień liczbę całkowitą, na którą wskazuje