wskaźniki w c++

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

wskaźniki w c++

Post autor: c4r0 » 07 lut 2007, 20:31

Od jakiegoś czasu dręczy mnie jedno pytanie, na które nie mogę znaleźć odpowiedzi. A mianowicie co to tak właściwie jest wskaźnik? Wiem, że jest to adres zmiennej w pamięci, ale nie jest to adres bezwzględny. Uruchomienie jednocześnie kilku kopii tego programu:

Kod: Zaznacz cały

main(){
        int zmienna;
        printf("%d", &zmienna);
        scanf("x");
}
wyświetli te same liczby, choć są to fizycznie inne zmienne. I teraz pytanie co konkretnie oznacza wartość wskaźnika? I tak BTW jak zdobyć dostęp do zmiennych innego uruchomionego programu (tak jak to robią np. trainery do gier)? :)

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 07 lut 2007, 21:23

Jeśli piszesz:

Kod: Zaznacz cały

printf("%d", &zmienna)
Funkcja wypisze wartość wskaźnika jako wartość dziesiętną. W rzeczywistości będzie to adres w pamięci, jednak zgodnie ze standardem takie zagranie daje nieokreślony wynik. Aby wypisać prawidłowo wskaźnik posługujemy się Jeśli chcesz wypisać wartość zmiennej powinieneś posłużyć się kodem:

Kod: Zaznacz cały

printf("%p", &zmienna)
To jest działanie określone i mamy pewność, że będzie dobrze działać. Chociaż w tym przypadku postać w jakiej wskaźnik zostanie wypisany jest zależny od konkretnej maszyny i kompilatora.

Rozumiem, że druga instrukcja ma oczekiwać na przycisk x? Nie byłoby bardziej ekonomicznie zastosować getch()?

A dostawanie się do innych programów to już nie jest zagadnienie z C. To zagadnienie z zakresu programowania w danym systemie operacyjnym. Jedyna technika jaką znam w systemie Windows polega na tworzeniu nazwanych obiektów którym nadaje się odpowiednie atrybuty. Wtedy drugi uruchamiany program podaje do systemu nazwę obiektu do jakiego chciałby się dostać i otrzymuje informację czy obiekt taki znajduje się w systemie i jeśli jest to dozwolone otrzyma do niego wskaźnik. Nie mam pojęcia jednak jak robią to trainery do gry. Podejrzewam jednak w tym miejscu już sztuczki na niskim poziomie wymagające głębszej znajomości działania systemu.

ODPOWIEDZ