keil

czy spotkal sie ktos moze z jakims kursem obslugi Keila dla tych co znaja troche C ??? ... chodzi mi o to od czego zaczac jesli chce sie pobawic w programowanie mikrokontrolerow.

MRL

Reply to
lipus
Loading thread data ...

pytanie zapewne banalne ... ale ja dzis zainstalowalem sobie Keila i zaczynam sie uczyc C

nie moge pojac jednej rzeczy:

dlaczego dziala mi funkcja:

void zamien (int *tmp1, int *tmp2) { int tmp3; tmp3 = *tmp1;

*tmp1 = *tmp2; *tmp2 = tmp3; }

void main (void) { int A = 10 , B = 20; zamien(&A,&B); }

a nie dziala ta ktora napisalem jako pierwsza:

void zamien (int tmp1, int tmp2) { int tmp3; tmp3 = tmp1; tmp1 = tmp2; tmp2 = tmp3; }

void main (void) { int A = 10 , B = 20; zamien(A,B); }

wiem co oznaczaja * ale nie pojmuje dlaczego nie moze dzialac drugi listing ... czy mozna to zrobic bez dzialania na wskaznikach ???

pozdrawiam

Reply to
lipus

U¿ytkownik "lipus" napisa³ w wiadomo¶ci news:bgdh85$fk7$ snipped-for-privacy@sunrise.pg.gda.pl...

W drugim przypadku przekaza³e¶ parametry przez warto¶æ. Znaczy to, ¿e wewn±trz funkcji 'zamien' zmienne tmp1 i tmp2 s± lokalnymi zmiennymi inicjowanymi warto¶ciami A i B. Tak wiêc Twoja operacja zamiany dzia³a tylko na lokalnych zmiennych. Po wyj¶ciu z funkcji zmienne tmp1 i tmp2 zostaj± utracone za¶ A i B pozostaj± nietkniête. One by³y przecie¿ u¿yte tylko do zainicjowania tmp1 i tmp2.

Je¿eli mo¿na to z pewno¶ci± nie w tak prosty sposób... Pozdrawiam Wojtek

Reply to
Wojtek

Nie wiesz co oznaczaja i dlatego nie rozumiesz :-)

makrem.

J.

Reply to
J.F.

listing

Jak juz napisano w tym drugim wypadku przekazujesz do funkcji po prostu wartosc, ktora pozniej w funkcji jest lokalna, czyli operacja przepisania ma miejsce, ale nie jest widoczna na zewnatrz funkcji.

Sposoby, by to zrobic tak jak chcesz sa dwa : jeden juz zrobiles, ale jesli jest dla Ciebie niewygodny to zastosuj referencje, a wiec cos takiego:

void zamien(int & tmp1, int & tmp2) { int tmp3 = tmp1; tmp1 = tmp2; tmp2 = tmp3; };

i dalej normalnie : void main() { int A = 10, B = 20; zamien(A, B); };

Referencje roznia sie troche od wskaznikow i nie wszedzie sie nadaja, ale w tym wypadku ich zastosowanie powinno byc dla Ciebie idealne.

Pozdrawiam

Piotrek

Reply to
Piotr Nabielec

To zrob tak:

#include....

int A,B;

void zamien () { int tmp3; tmp3 = A; A = B; B = tmp3;

}

void main (void) { A = 10; B = 20; zamien(); }

ale, oczywiscie ograniczy Cie to tylko do zmiennych uzytych w funkcji zmien.

Reply to
Przemek

No, uwaga, abys nie zamieszal czlowiekowi terminologii. W C parametry mozna przekazywac tylko przez wartosc (i przez makroekspansje, ale mniejsza z tym). Dobrze rozumiem o co Ci chodzi, ale formalnie w obu przypadkach jest to przekazywanie parametru przez wartosc. :-)

Na poziomie implementacji sa tozsame, ale na poziomie koncepcyjnym to dwa osobne swiaty, wiec roznia sie "nieco" wiecej, niz troche. :-)

Ekhm, referencje w _C_?! :-)))

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

Ja w kwestii formalnej. W obu przekazal przez wartosc. :-) Raz przez wartosc _liczby_, drugi przez wartosc _wskaznika_. :-)

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

U¿ytkownik "Piotr Wyderski" napisa³ w wiadomo¶ci news:bgdsl1$k6r$ snipped-for-privacy@nemesis.news.tpi.pl...

No jasne. Mo¿na te¿ tak pwiedzieæ. Wojtek

Reply to
Wojtek

Nie, poprawnie mozna _tylko_ tak powiedziec*.Przekazywanie przez adres (referencje) to zupelnie inny sposob przekazywania parametrow i jest dostepne dopiero w C++. Podanie int * to przekazanie _wskaznika do zmiennej_ przez wartosc, a nie zmienej przez referencje. Dostep do zmiennej musi sie wowczas odbywac za pomoca operatora wyluskania "*", a w przypadku referencji nic takiego nie zachodzi. Efekt jest ten sam, ale na poziomie teorii sa to zupelnie rozne metody, dlatego sprostowalem. Oczywiscie to drobiazg nie warty wiekszej uwagi, ale po co mylic poczatkujacego. :-)

Pozdrawiam Piotr Wyderski

*) "Kompilatory" Aho, Sethi, Ullman tez tak twierdza, str. 402.
Reply to
Piotr Wyderski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.