*Wskaźniki - wskaźnik jako pierwszego elementu tablicy

0

Witam, jestem poczatkujący więc proszę o wyrozumiałośc ;)

Mam pewne wątpliwości co do wskaźników.
W załączniku dodałem zdjęcie.

Gdy tworzę skaxnik na zmieną, np:

int a=10;
int *wsk=&a;

*wsk - wartosc obiektu na który wskaźnik wskazuje
wsk - adres obiektu na który wskaźnik wskazuje
&wsk- adres wskaźnika

Wszytko, ok, logiczne. Ale:

Pierwszy element tablicy jest wskaźnikiem do niej, prawda? Wskaźnik przechowuje adres obiektu na który wskazuje. W przypadku tablicy, wypisuje sobie na ekran:
*tab - wartosc obiektu na który wskaźnik wskazuje
tab - adres obiektu na który wskaźnik wskazuje
&tab- adres wskaźnika

Adres obiektu na który wskaźnik wskazuje oraz adres wskaźnika jest taki sam, czyli wskaźnik ten przechowuje swój adres, a jednoczesnie wartośc zmiennej na który wskazuje. Czyli tak jakby pod jednym adresem zapisana jest wartośc oraz adres zmiennej?

Może mi ktoś ospisac jak to jest z tablicami i wskaźniakmi do nie? ;)

1

w przypadku dynamicznej tablicy masz wskaźnik na pierwszy element tablicy... i dres wskaźnika i jego wartość zazwyczaj nie jest taka... taki zapis bowiem nie ma najmniejszego sensu. Wskaźnik ma tylko zapisany adres tego, na co wskazuje, natomiast jego adres ma program.

4

Pierwszy element tablicy jest wskaźnikiem do niej, prawda?

Nie, pierwszy element tablicy to pierwszy element tablicy.

A wskaźnik na tablicę i wskaźnik na pierwszy element tablicy są sobie równe, bo wskaźniki przechowują adres początku, a nie np. końca obiektu na który wskazują. Więc logiczne jest że początek całej tablicy jest pod tym samym adresem co początek pierwszego elementu (o indeksie [0]) tej tablicy.

Do tego dochodzi niezbyt intuicyjna reguła, że nazwę tablicy bez jakichkolwiek znaczków można przekazać do funkcji która się spodziewa wskaźnika na element tablicy, albo przypisać do zmiennej o typie wskaźnikowym, i wtedy samo tab ma takie samo znaczenie jak &tab[0].

2

Pierwszy element tablicy jest wskaźnikiem do niej, prawda?
Nie? Skąd w ogóle taki dziwny pomysł? Jeśli np. masz tablicę charów to jak niby pierwszy element może być wskaźnikiem?

W C nazwa statycznej tablicy jest konwertowana na wskaźnik do pierwszego elementu w większości przypadków. Wniosek: tab - adres pierwszego elementu.
&tab to adres tablicy i to jest to samo co adres pierwszego elementu, bo tablica zaczyna się tam gdzie jego pierwszy element. Stąd &tab == tab.

Dla wskaźnika jest inaczej, bo adres wskaźnika to nie to samo co adres początku bloku pamięci, na który ten wskaźnik wskazuje. Wskaźnik może być zupełnie gdzie indziej.

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