Dzień dobry.
- Po piersze mam następujący kod:
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main ()
{
int a=17; //deklaracja pierwszej zmiennej, którą chcemy odczytać
int b=5; // deklaracja drugiej zmiennej, którą chcemy odczytać
int * pWsk; //utworzenie wskaźnika, który będzie wskazywał na zmienną a
pWsk=&a; //przypisanie wskaźnikowi adresu zmiennej a
int * pWskB; //utworzenie wskaźnika pWsk, który będzie wskazywał na zmienną b
pWskB=&b; //przypisanie wskaźnikowi pWskB adresu zmiennej b
cout<<pWsk<<" "<<*pWsk<<endl; // wyświetlenie zawartości wskaźnika pWsk (adres zmiennej a) i wartości zmiennej, na którą wskazuje wskaźnik
cout<<pWskB<<" "<<*pWskB<<endl; // wyświetlenie zawartości wskaźnika pWskB (adres zmiennej b) i wartości zmiennej, na którą wskazuje wskaźnik
cout<<endl<<endl<<endl; // znaki nowej linii
int *wskaznik; // drugi wskaźnik
string pobierz; // deklaracja zmiennej, do której z klawiatury chcemy wpisać adres zmiennej
cout<<"adres: "; cin>>pobierz; //pobieranie znaków z klawiatury do zmiennej pobierz
wskaznik=atoi(pobierz.c_str()); //przypisanie wskaźnikowi skonwertowanego adresu pobranego z klawiatury z typu string na int (czyli na typ wskaźnika)
cout<<wskaznik<<" "<<*wskaznik; // wyświetlenie adresu przechowywanego przez wskaźnik i zawartości komórki pamięci, na którą ten wskaźnik wskazuje
return 0;
}
Jak widać mamy tam zmienną a, następnie przypisujemy jej adres wskaźnikowi pWsk i wyświetlamy zawartość wskaźnika (a więc adres zmiennej a przechowywany przez wskaźnik pWsk) oraz zawartość komórki pamięci, na którą wskazuje wskaźnik (czyli zawartość zmiennej a). I teraz mój problem. Otóż chciałbym dalej (poniżej) móc wpisać z klawiatury wyświetlony adres przechowywany przez wskaźnik pWsk (adres zmiennej a), co w następstwie spowodowało by wyświetlenie adresu zmiennej a (ponownie) i jej zawartości - ale na podstawie wpisanego jej adresu. Zamiast adresu zmiennej a można by wpisać adres zmiennej b. I teraz problem mam z tą linijką wskaznik=atoi(pobierz.c_str());
. Ponieważ kompilator zwraca mi błędy. Kombinuję już dłuższy czas i nic. To jak to zrobić?
- Po drugie - czy wskaźnik pozwala na dostęp do pamięci tylko w obrębie programu, w którym został uruchomiony, czy też istnieje możliwość pobrania/ewentualnie zapisania wartości komórki pamięci drugiego programu?
Czyli np. mam dwa programy. W pierszym tworzę zmienną i przypisuję jej wartość np. niech będzie 17. W tym programie wyświetlam jej adres w pamięci RAM pobrany wskaźnikiem (np. 0x7fff57917bbc ) I ten program pozostaje ciągle uruchomiony. Uruchamiam drugi program i w tym programie wpisuje znany mi adres komórki (czyli 0x7fff57917bbc ), co powoduje wyświetlenie jej zawartości przez program drugi (czyli wyświetli 17). Czy to się da zrobić za pomocą wskaźników? Jeśli tak to jak tego dokonać? Ja próbowałem, lecz nie mi nie działało.
- Czy da się za pomocą wskaźników uzyskać dostęp do dowolnej komórki pamięci (tzn. pobrać zawartość komórki i zapisywać nową zawartość owej komórki)?
Np. chciałbym utworzyć wskaźnik i następnie przypisać mu adres dowolnej (wybranej) komórki pamięci, a następnie zawartość owej komórki pamięci wyświetlić.
Dowolnej komórki ma oznaczać, że mogę sobie wybrać jaką kolwiek, którą zechcę komórkę z całej zawartości pamięci RAM? Coś w stylu:
int *wskaznik;
wskaznik = 99283; // wpisanie adresu wybranej komórki
cout << *wskaznik; // wypisanie zawartości wybranej komórki pamięci
Tylko że to nie działa. Czy to się da zrobić?