Czy w jezku C zawsze powinienem przekazywac zmienne do funkcji poprzez wsakznik?

0

Witam

Jestem poczatkujacym programista. Bardzo jednak interesuje mnie ten temat.
Ucze sie jezyka C i zastanawiam sie czy zawsze powinno sie przekazywac zmienne do funkcji uzywajac do tego wskaznika.
Pewnie sa jakies momenty, ze nie mozna, ale czy generalnie zasada jest, ze tak sie robi?

0

nie dlaczego? NA przykład: jeżeli używasz tylko wartości jakiejś zmiennej lecz nie chcesz zmieniać tej wartości to przekazujesz jak Bóg przykazał przez wartość. JAk chcesz ją modyfikować (np. zamienić 2 liczby ze sobą) to wtedy używasz wskaźnika czyli przekazujesz przez referencję.

0

No a nie poprawia to wydajnosci programu?

0

Wolałbym żeby ktoś potwierdził to co piszę, ale.
Przekazywanie przez wskaźnik jest
1) szybsze
2) mniej zasobożerne (nie tworzysz kolejnej zmiennej)

Czasami chcemy utworzyć kopie i na kopii pracować. W większości przypadków wystarczy przekazać wskaźnik z odpowiednim modyfikatorem (jak tylko do odczytu to const)
Lecz kod staję się mniej czytelny i bardziej niebezpieczny.

1

Przekazanie przez wskaźnik powoduje tyle że zmienna nie jest kopiowana. Ale z drugiej strony dostęp do danych jest wolniejszy bo masz dodatkowy poziom pośredniości.

0

Czyli jezeli moge skorzystac z obydwu sposobow to, ktory wybrac?

0

Małe struktury (np. int, double) zawsze jest szybciej przekazywać przez wartość. Wskaźniki mogą przeszkodzić kompilatorowi w dokonaniu pewnych optymalizacji, poza tym dostęp przez wskaźnik zwykle jest minimalnie powolniejszy. Wskaźniki stosuje się do przekazywania większych struktur danych, aby uniknąć kopiowania, lub w sytuacji gdy za pośrednictwem parametru odbieramy wartość obliczoną przez funkcję.

0

Przekazuj przez wartość, bo doświadczenie uczy że wielu ludzi nie radzi sobie ze wskaźnikami ;]

1

czyli jezeli moge skorzystac z obydwu sposobow to, ktory wybrac?

Zależy od stytuacji...

Jeśli wywołanie funkcji ma zmienić wartość zmiennej (hmm) w kodzie wywołującym - wskaźnik
Jeśli obiekt jest duży (tak na oko - 16+ bajtów) - wskaźnik.
W przeciwnym wypadku - przez wartość.

Tutaj mały diagram:
valorref.png

0

Dzieki wielkie wszystkim!
Swietny diagram!

0
gsdgsdg napisał(a):

w c nie ma referencji... - fasadin dzisiaj, 14:11

The name C++ reference may cause confusion, as in computer science a reference is a general concept datatype, with pointers and C++ references being specific reference datatype implementations.

Źródło: http://en.wikipedia.org/wiki/Reference_(C%2B%2B)

0

i? Nadal twierdze że w C nie ma referencji (wiesz że są dwa języki? C oraz C++?) - fasadin 1 godz. temu

ok no to powoli ci wytłumaczę. Z tego zdania wynika że są dwa typy referencji: 1. Wskaźniki (C i C++) oraz 2. Referencje C++. Jak masz zwierzę, is są dwa jego typy: Dzik i jeżozwierz to czy tylko jeżozwierz jest zwierzęciem bo nazwa jest podobna/taka sama? Jizas...

0

czyli po prostu nie przeczytałeś co napisałem. A i te '-1' przy każdym moim poście - LOL

0

a i jeszcze ciekawostka:

There is a simple conversion between pointers and references: the address-of operator (&) will yield a pointer referring to the same object when applied to a reference, and a reference which is initialized from the dereference (*) of a pointer value will refer to the same object as that pointer, where this is possible without invoking undefined behavior. This equivalence is a reflection of the typical implementation, which effectively compiles references into pointers which are implicitly dereferenced at each use. Though that is usually the case, the C++ Standard does not force compilers to implement references using pointers.

To samo źródło.

0

Przekazywanie argumentu przez (niestały) wskaźnik mówi innemu programiście pracującemu nad tym projektem, że ta funkcja może zmienić ten argument. Używa się tego też w C++, niektóre poradniki stylistyczne zakazują w tym wypadku stosowania referencji (http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Reference_Arguments), IMO słusznie. W celach optymalizacji można przekazywać normalne argumenty przez stały wskaźnik, ale najpierw bym sprawdził, czy warto tak komplikować. Kopiowanie nie jest aż tak wolne, w większości wypadków nie powinno to robić różnicy (do jakiś 8 słów bym sobie głowy nie zawracał).

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