Witam,
mam pytanie odnośnie wskaźników w jezyku c.
Jeśli
int i=7
int **q1
int *t[10]
to czy q1=&(&i) , q1=&t jest poprawne ?
Pozdrawiam
Sprawdź?
Ale wydaje mi sie że są nie poprawne bo &i
czyli adres zmiennej i
jest wartością i nie można dla niej pobrać adresu.
Kompilując wyskakuje error: lvalue required as unary '&' operand
q1 = &(&i)
&i
to nie jest żaden obiekt w pamięci, więc nie możesz pobrać adresu
int* p = &i;
q1 = &p;
to już przejdzie, bo p
to zmienna, która gdzieś istnieje w pamięci, więc można pobrać jej adres
A no właśnie ;) Bo można pobrać tylko adres czegoś co leży gdzieś w pamięci. A wynik &i
nie leży bo to tylko wartość.
W drugim przypadku prawdą byloby q1=t
bo nazwa tablicy może być zrzutowana na adres do pierwszego elementu.
Właśnie w drugim juz ogarnąłem i miałem pisać.
Można uzyskać adres adresu ?
Nie bo adres to jest wartość! Wyobraź sobie że operator & zwraca na przykład zawsze liczbę 1
. Ta liczba nie siedzi nigdzie w pamięci. W trakcie działania programu może ona być przerzucana pomiędzy rejestrami procesora i nigdy nie znaleźć się w pamięci.
Ok dzięki za pomoc !!