Kiedy opłaca się stosować wskaźniki?

0

Z tego co wiem, każda zmienna przechowująca adres jakiejś innej zmiennej w pamięci komputera ma rozmiar 4 bajtów. Czy istnieje sens używania wskaźników na zmienne (w stosie) o rozmiarze mniejszym niż 4 bajty?

Np.

int zmienna;		//2 bajty
int *WskZmienna=&zmienna;	//4 bajty
			//razem 6 bajtów

Czy w wyżej wymienionym przykładzie ma sens taki zapis? Czy nie lepiej byłoby NIE używać wskaźnika (oszczędność 4 bajtów...)?

PZDR
[email protected]

P.S. Nurtuje mnie to bardzo, ponieważ w wielu książkach "DLA POCZĄTKUJĄCYCH" można znaleźć takie przykłady używania wskaźników.

0

Wskaźniki są idealne do jakichś bardizej zaawansowanych zadań jak dynamiczne struktury danych, klasy (jak również tablicze czy zwykłe stringi).
Jednak aby je załapać na czymś trzeba je wytłumaczyć, dla tego masz na początku takie właśnie przykłady aby się z nimi oswoić.

Nikt nie zmusz nikogo do pisania tak a nie inaczej więc jeżeli w Twoim programie nie potrzebujesz takiego narzędzia jakim są wskaźniki to ich nie używaj.

0

Jest jeszcze jedna rzecz, jeśli piszesz pod dosa i dla trybu rzeczywistego (640kb). Choćbyś nie wiem co robił, zawsze przydzielasz wielokrotność 16 bajtów (rozmiar paragrafu). Takie są niestety mechanizmy dosa i ich nie przeskoczysz, więc czasem opłaca się wrzucic coś na stos, mimo, że teoretycznie, sterta jest atrakcyjniejsza. Ale stosu trzeba zawsze pilnować :] i nie przekracza on 64kb w trybie rzeczywistym.

// nawet char* c=new char[2] - też masz przydzielone 16 bajtów.

// Wskaźników uzywaj nie wtedy, kiedy się łatwiej pisze i czyta, tylko wtedy kiedy jest to bardziej opłacalne ze względu na rozmiar zajmowanej pamięci i szybkośc algorytmu (bez względu na to, czy są to duże czy małe rozmiary - wyrabiaj sobie nawyki). Im więcej się pisze, tym łatwiej się pisze. :-P Referencja - jak wskaźnik może być do każdego typu (poza void&- z przyczyn oczywistych). [do postu poniżej]

0

wskaznikow uzywaj tylko wtedy jezeli kod bedzie latwiejszy do napisania i przeczytania. nie przejmuj sie wielkoscia zmiennych bo tylko w duzych projektach moga one zajmowac duzo pamieci. generalnie zamiast wskaznikow lepiej stosowac referencje (choc nie zawsze jest to mozliwe).

0

Hmm.... powiem to tak jak moi przedmowcy - wskazniki sa doskonale do klas i dynamicznych struktur danych lub duzych obiektow. Sa idealne podczas przekazywania paramterow do funkcji w przypadku duzych obiektow - jezeli mamy na przyklad tablice 200 elementow typu int logiczniejsze i przede wszystkim szybsze jest przekazanie jednego wskaznika na ta tablice niz przekazanie kopii tej tablicy.... Natomiast jezeli chodzi o uzywanie wskaznikow do pojedyneczej zmiennej jakiegos prostego typu to jest to ogolnie zbyteczne - choc wedlug opinii niektorych znanych programistow uzywanie wskaznika jest co najmniej tak szybkie jak uzycie normalnej zmiennej czyli na szybkosci nie tracimy w sumie nic. Tylko i wylacznie nastepuje wtedy strata pamieci..

0

Ja też się wypowiem [cya] .

Moim zdaniem wskaźniki to fajna rzecz ponieważ:

*przyspieszają pracę z tablicami (np. przesuwamy wskaźnik aby wskazywał na kolejny element tablicy - i to wykonuje się szybciej niż tab[50])
*umożliwia pracę z operatorem new
*dziwne buźki są na tym foru B-|
*tak rozbudowane jak wskaźniki na element klasy (chyba nazywają się intelinetne) i do funkcji mogą się naprawdę przydać.....

Do wcześniejszego postu dodam, że zamiast przez wskaźnik można przekazywać przez referencję, i to też jest dobre....

0

zamiast przez wskaźnik można przekazywać przez referencję, i to też jest dobre....

  • a nawet lepsze!
0

... jezeli mamy na przyklad tablice 200 elementow typu int logiczniejsze i przede wszystkim szybsze jest przekazanie jednego wskaznika na ta tablice niz przekazanie kopii tej tablicy......

a jak się przekazauje tablice do funkcji przez wartość ? [???] ;-)
z tego co wiem w C tablica wysyłana do funkcji zawsze jest przkazywana przez wskaźnik ... (w sumie to nazwa tablicy jest jakby const_wsk) ... przez wartość są przekazywane jedynie pojedyncze elementy tablicy

0

Jak tablice przez wartosc ?? Stworz klase zawierajaca tablice i napisz wlasny konstruktor kopiowania robiacy gleboka kopie.

0

jesli to tylko mozliwe nalezy raczej uzywac przekazywania przez referencje

1 użytkowników online, w tym zalogowanych: 0, gości: 1