matematykaszkolna.pl
c++ kodziarz: mógłbym prosić kogoś aby mi wypisał obok każdej linijki w komentarzu jaka zmiana zachodzi, ponieważ uczę się wskaznikow i probuje to zrozumiec kod: #include <iostream> using namespace std; int main(){ int x=5; int *pi=&x; int **ppi = π int y=x; *ppi=&y; *pi=6; **ppi=7; cout << x << " " << y << endl; // x=5, y=7 return 0; }
12 paź 00:04
kodziarz: forum zamieniło mi nazwe na pi a więc poprawiony kod: kod: #include <iostream> using namespace std; int main(){ int x=5; int *w=&x; int **ppi = w int y=x; *ppi=&y; *w=6; **ppi=7; cout << x << " " << y << endl; // x=5, y=7 return 0; }
12 paź 00:05
Dziadek Mróz: Przyjmijmy, że pamięć została naszemu programowi tak przydzielona: W adresach znajdują się zmienne: x: 0x0000 typu całkowitego o wartości 5 w: 0x0001 typu wskaźnikowego o adresie zmiennej a ppi: 0x0002 typu wskaźnikowego o zawartości zmiennej w y: 0x0003 typu całkowitego o wartości zmiennej x int x = 5; int *w = &x; int **ppi = &w; int y = x; Zmienna: [ x | w | ppi | y ] Adres: [0x0000| 0x0001| 0x0002| 0x0003] Zawartość: [ 5 | 0x0000| 0x0001| 5 ] *ppi = &y; *ppi − ustalamy wartość, czyli adres na w, w = &y Zmienna: [ x | w | ppi | y ] Adres: [0x0000| 0x0001| 0x0002| 0x0003] Zawartość: [ 5 | 0x0003| 0x0001| 5 ] *w = 6; *w − ustalamy wartość, czyli zmienną y, y = 6 Zmienna: [ x | w | ppi | y ] Adres: [0x0000| 0x0001| 0x0002| 0x0003] Zawartość: [ 5 | 0x0003| 0x0001| 6 ] **ppi = 7; *ppi − ustalamy zawartość, czyli zmienną y, y = 7 Zmienna: [ x | w | ppi | y ] Adres: [0x0000| 0x0001| 0x0002| 0x0003] Zawartość: [ 5 | 0x0003| 0x0001| 7 ]
12 paź 03:37
Dziadek Mróz: Dla kodu http://pastebin.com/SGrUcsmW #include <iostream> int main() { int x = 5; int *w = &x; int **ppi = &w; int y = x; std::cout << "x: " << x << "\t\t&x: " << &x << std::endl; std::cout << "w: " << w << "\t&w: " << &w << "\t\t*w: " << *w << std::endl; std::cout << "ppi: " << ppi << "\t&ppi: " << &ppi << "\t*ppi: " << *ppi << "\t**ppi: " << **ppi << std::endl; std::cout << "y: " << y << "\t\t&y: " << &y << std::endl << std::endl; *ppi = &y; std::cout << "ppi: " << ppi << "\t&ppi: " << &ppi << "\t*ppi: " << *ppi << "\t**ppi: " << **ppi << std::endl; std::cout << "w: " << w << "\t&w: " << &w << "\t\t*w: " << *w << std::endl << std::endl; *w = 6; std::cout << "w: " << w << "\t&w: " << &w << "\t\t*w: " << *w << std::endl << std::endl; std::cout << "x: " << x << "\t\t&x: " << &x << std::endl; **ppi = 7; std::cout << "ppi: " << ppi << "\t&ppi: " << &ppi << "\t*ppi: " << *ppi << "\t**ppi: " << **ppi << std::endl; std::cout << "w: " << w << "\t&w: " << &w << "\t\t*w: " << *w << std::endl; std::cout << "y: " << y << "\t\t&y: " << &y << std::endl << std::endl; return 0; } Przykładowy wynik: x: 5 &x: 0x22feac w: 0x22feac &w: 0x22fea8 *w: 5 ppi: 0x22fea8 &ppi: 0x22fea4 *ppi: 0x22feac **ppi: 5 y: 5 &y: 0x22fea0 ppi: 0x22fea8 &ppi: 0x22fea4 *ppi: 0x22fea0 **ppi: 5 w: 0x22fea0 &w: 0x22fea8 *w: 5 w: 0x22fea0 &w: 0x22fea8 *w: 6 x: 5 &x: 0x22feac ppi: 0x22fea8 &ppi: 0x22fea4 *ppi: 0x22fea0 **ppi: 7 w: 0x22fea0 &w: 0x22fea8 *w: 7 y: 7 &y: 0x22fea0
12 paź 04:00
Dziadek Mróz: Wskaźniki są proste tylko trzeba poćwiczyć. To praca na pamięci i adresach.
12 paź 04:01
Dziadek Mróz: rysunek ppi: 0x22fea8 &ppi: 0x22fea4 *ppi: 0x22feac **ppi: 5 w bezpośrednio wskazuje na a ppi pośrednio wskazuje na a poprzez w
12 paź 04:31
kodziarz: Jesteś moim Mistrzem! Dziękuję!
12 paź 13:00