int zmienna;
int *wsk_0 = &zmienna; // ustawiam wskaźnik na zmienną
int *wsk_1 = wsk_0; // ta linia
int *wsk_2 = &wsk_0[0];// i ta znaczą to samo czyli przypisanie wskaźnikowi adresu na który wskazuje inny wskaźnik
int *wsk_3 = *wsk_1; // to nie zadziała, bo *wsk_1 to wartość zapisana w miejscu na które wskazuje wsk_1
zmienna = wsk_1; // albo
zmienna = &wsk_1[0]; // też nie zadziała, wsk_1 albo &wsk_1[0] to adres na który wskazuje wsk_1
Dochodzę więc do wniosku, że wskaźniki nie istnieją fizycznie, bo nie mają adresu.
1. Czy wskaźniki istnieją fizycznie czy tylko w języku programowania?
int *wsk_0 = new int;
int zmienna;
int *wsk_1 = &zmienna;
2. Czy są jakieś zasady, którego z tych sposobów używać? Lepszym wydaje się być oczywiście dynamiczne przydzielanie pamięci, ale ten drugi też po coś istnieje.
bool *wsk = new bool;
*wsk = 65;
Wskaźnik będzie zwracał wartość 0, jeśli liczba jest parzysta i 1 jeśli nie.
3. Czy używa się takiego rozwiązania w praktyce?
Mam liczbę 4-bitową zakodowaną w U2. Przyjmuje ona wartości 0
..7
i -8
..-1
. Nie da się np. obliczyć wartości bezwzględnej z najniższej wartości, bo wartości dodatnich jest o jedną mniej. Przy zmianie znaku:
1000 ~ // -8
0111 +1 // 7
1000 // -8
4. Czy istnieje jakiś sposób, poza ograniczeniem danych wejściowych/nałożeniem warunku, na rozwiązanie tego problemu?