maciek0013 Opublikowano 1 Lutego 2005 Zgłoś Opublikowano 1 Lutego 2005 Witam. Czytam obecnie trochę o wskaźnikach w C++ i mam takie pytanie. Jezeli mam wskaznik do tablicy (np wsk = tablica) to mam tam adres poczatku tej tablicy. Jeżeli zrobię wsk++ to wskaźnik pokaże na kolejny element w tej tablicy... Moje pytanie jest następujące : czy ta instrukcja (wsk++) przesówa wskaźnik na kolejny element tablicy czy kolejny adres w pamięci (oczywiście z zachowaniem ilości bajtów odpowiadającej typowi elementów w tablicy) ?? Pytanie może i wygląda trywialnie, ale wyobraźmy sobie sytuacje, że mamy dużą tablicę. Co się wtedy stanie: 1. Kompilator jeżeli nie będzie miał spójnego obszaru w pamięci to wyświetli błąd. 2. Kompilator podzieli tablice na mniejsze i w ten sposób umieści je w pamięci. Pytam o to tylko dlatego, że w książce Grmbosza przeczytałem, że wyświetli błąd, a następnie w jakimś innym opracowaniu, że nie. Jeżeli wiecie jak to jest naprawdę (no i czy to może zależy od wersji kompilatora) to będę wdzięczny za odpowiedź. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Polar Opublikowano 1 Lutego 2005 Zgłoś Opublikowano 1 Lutego 2005 (edytowane) Wskaźnik pokazuje na adres w pamięci gdzie znajduje się element o danym indexie tablicy, wskaźnik ma też w sobie wiedzę na temat typu elementów w tablicy (float , char) . Dysponując ta wiedzą , przesunięcie wskaźnika++ powoduje jego przsunięcie na kolejny obszar w pamięci, co jest jednoznaczne z przesunięciem i pokazaniem na następny element tablicy, to jest dokładnie to samo tylko wykonuje się na różnym poziomie rozumienia tej pracy. Jak to się dzieje... no coż, jest to już Assembler dla tęgich głów. :-P To jest tam dokładnie, niemal łopatologicznie wytłumaczone... ( Nie spotkałem się jeszcze z książką która by to dokładniej tłumaczyła tematykę wskaźników. Spójny obszar pamięci ? Czy chodzi ci o model pamięci ? ( tiny , small , . .. large ....) że jakiś model nie może przekroczyć powiedzmy 64KB ? A jeśli nie to podaj stronę bo nie pamiętam niczego takiego... Edytowane 1 Lutego 2005 przez razor1 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
maciek0013 Opublikowano 1 Lutego 2005 Zgłoś Opublikowano 1 Lutego 2005 Ok Jeżeli chodzi o wskaźniki to tyle wiem. Chodzi mi o coś innego : Zakładam, że chcemy mieć tablicę powiedzmy 2000 liczb float. Czy kompilator pozwoli nam na to tylko jeżeli będzie w stanie znaleść jednolity obszar pamięci na całą tą tablicę ??? Czy jest możliwe, że podzieli tą tablicę i zaalokuje ją w kilku różnych miejscach pamięci ?? To jest istota mojego pytania -> z tego wynika czy instrukcja wsk++ przesówa się na kolejny obszar pamięci, czy na kolejną komórkę w tablicy Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
yasin Opublikowano 1 Lutego 2005 Zgłoś Opublikowano 1 Lutego 2005 Ok Jeżeli chodzi o wskaźniki to tyle wiem. Chodzi mi o coś innego : Zakładam, że chcemy mieć tablicę powiedzmy 2000 liczb float. Czy kompilator pozwoli nam na to tylko jeżeli będzie w stanie znaleść jednolity obszar pamięci na całą tą tablicę ??? Czy jest możliwe, że podzieli tą tablicę i zaalokuje ją w kilku różnych miejscach pamięci ?? To jest istota mojego pytania -> z tego wynika czy instrukcja wsk++ przesówa się na kolejny obszar pamięci, czy na kolejną komórkę w tablicy 1251358[/snapback] jak jest to rozwiazane to zalezy od kompilatora i od systemu operacyjnego, moze byc roznie, ale Ty sie tym nie musisz przejmowac, po to sa standardy, uzywajac wsk++ przechodzisz na kolejny element tablicy bez wzgledu na to czy w pamieci elementy sa ulozone jeden za drugim, czy tez pierwszy jest w zerowym adresie, a drugi gdzies na koncu, jak to sie dzieje, ze to dziala moge siegnac do "knigi" i Ci wyjasnic, ale takich szczegolow nie trzeba znac, zeby sie sprawnie poslugiwac wskaznikami i wykonywac operacje na pamieci Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
maciek0013 Opublikowano 1 Lutego 2005 Zgłoś Opublikowano 1 Lutego 2005 jak jest to rozwiazane to zalezy od kompilatora i od systemu operacyjnego, moze byc roznie, ale Ty sie tym nie musisz przejmowac, po to sa standardy, uzywajac wsk++ przechodzisz na kolejny element tablicy bez wzgledu na to czy w pamieci elementy sa ulozone jeden za drugim, czy tez pierwszy jest w zerowym adresie, a drugi gdzies na koncu, jak to sie dzieje, ze to dziala moge siegnac do "knigi" i Ci wyjasnic, ale takich szczegolow nie trzeba znac, zeby sie sprawnie poslugiwac wskaznikami i wykonywac operacje na pamieci 1251380[/snapback] Wielkie dzięki. Właśnie o taką odpowiedź mi chodziło :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...