Skocz do zawartości
maciek0013

Tablica W C(++)

Rekomendowane odpowiedzi

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ź.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez razor1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...