Dynamiczna tablica dlaczego nie ma *?

0

Cześć, mam pytanie,
wiadomo, że

int *p;

tworzy nam wskaźnik

cout << p <<;

wyświetli co wskaźnik ma, czyli jakiś adres;

cout << &p <<;

to wyświtli adres p

cout << *p <<;

to wyświetli wartość jaka jest pod adresem, który przechowuje p

to dlaczego przy dynamicznej tablicy

int *p = new int[10];

odwołujemy się do wartości bez tej *
czyli

p[2]= 2;
p[3]= 4;

zamiast

*p[2]= 2;
1

Bo x[y] = *(x + y)

0

co można sprawdzić zapisując p[2] jako 2[p] :P

0
jackweb_ niezal. napisał(a)

Bo x[y] = *(x + y)

Powiem więcej (uważamy, że to dla typów prostych, odnosi się to również do kolegi wyżej):
x[y] = *(x + y) = *(y + x) = y[x]

0
Stefan Gżegżółka napisał(a)

zamiast

*p[2]= 2;

Ponieważ zgodnie z priorytetem operatorów najpierw wykonać musi się dereferencja *p czyli dostaniemy wartość int. int[n] wtedy nie ma sensu. Dlaczego więc nie jakoś inaczej? Bo jest wygodnie. Zmienną wskaźnikową możemy często używać wymiennie ze zmienną tablicową z tym samym rezultatem tj. tablica zostanie zinterpretowana jako wskaźnik na jej pierwszy element i vice-versa. Sprawa ma się do operatora [] czy operatorów arytmetycznych, rzutowania... W tej grupie nie ma w szczególności operatorów & i sizeof które zachowują się zupełnie inaczej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0