keil
Masz problem? Zapytaj na forum elektroda.pl
From: "lipus" <lipciu.usunto_at_nospam_wp.pl>
Subject: keil
Date: Fri, 1 Aug 2003 13:21:47 +0200
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
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!news.internetia.pl!not-for-mai
From: "homsky" <jarekchoma_at_nospam_wp.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 13:31:14 +0200
Nie działa ponieważ parametry są przekazywane do funkcji przez wartość , a
nie przez zmienną.
Lokalnie wenątrz funkcji wartości są zamieniane.
Użytkownik "lipus" <lipciu.usunto_at_nospam_wp.pl> napisał w wiadomości
news:bgdh85$fk7$1_at_nospam_sunrise.pg.gda.pl...
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
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Wojtek" <tuptuptup_at_nospam_box43.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 13:52:17 +0200
Użytkownik "lipus" <lipciu.usunto_at_nospam_wp.pl> napisał w wiadomości news:bgdh85$fk7$1_at_nospam_sunrise.pg.gda.pl...
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
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.
... czy mozna to zrobic bez dzialania na wskaznikach ???
Jeżeli można to z pewnością nie w tak prosty sposób...
Pozdrawiam
Wojtek
========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news.man.poznan.pl!news.task.gda.pl!news!not-for-mai
From: "lipus" <lipciu.usunto_at_nospam_wp.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 14:18:54 +0200
ano doszedlem do tego ale posta nie anulowalem ... dziekuje za pomoc ... do
makr to mi jeszcze troche czasu potrzeba
pozdrawiam
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 16:16:04 +0200
Wojtek wrote:
W drugim przypadku przekazałeś parametry przez wartość.
Ja w kwestii formalnej. W obu przekazal przez wartosc. :-) Raz
przez wartosc liczby, drugi przez wartosc wskaznika. :-)
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Wojtek" <tuptuptup_at_nospam_box43.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 18:33:49 +0200
Użytkownik "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl> napisał w wiadomości news:bgdsl1$k6r$3_at_nospam_nemesis.news.tpi.pl...
Wojtek wrote:
W drugim przypadku przekazałeś parametry przez wartość.
Ja w kwestii formalnej. W obu przekazal przez wartosc. :-) Raz
przez wartosc liczby, drugi przez wartosc wskaznika. :-)
No jasne. Można też tak pwiedzieć.
Wojtek
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 20:11:43 +0200
Wojtek wrote:
No jasne. Można też tak pwiedzieć.
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.
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.e-wro.pl!not-for-mai
From: J.F. <jfox_at_nospam_poczta.onet.pl.nospam>
Subject: Re: keil
Date: Fri, 01 Aug 2003 13:53:57 +0200
On Fri, 1 Aug 2003 13:21:47 +0200, lipus wrote:
pytanie zapewne banalne ... ale ja dzis zainstalowalem sobie Keila i
zaczynam sie uczyc C
a nie dziala ta ktora napisalem jako pierwsza:
void zamien (int tmp1, int tmp2)
{
int tmp3;
tmp3 = tmp1;
tmp1 = tmp2;
tmp2 = tmp3;
}
wiem co oznaczaja * ale nie pojmuje dlaczego nie moze dzialac drugi listing
Nie wiesz co oznaczaja i dlatego nie rozumiesz :-)
... czy mozna to zrobic bez dzialania na wskaznikach ???
makrem.
J.
========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!not-for-mai
From: "Piotr Nabielec" <eloy_at_nospam_go2.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 14:00:45 +0200
dlaczego dziala mi funkcja:
[...]
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 ???
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
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 16:13:14 +0200
Piotr Nabielec wrote:
Jak juz napisano w tym drugim wypadku przekazujesz do funkcji
po prostu wartosc
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. :-)
Referencje roznia sie troche od wskaznikow
Na poziomie implementacji sa tozsame, ale na poziomie
koncepcyjnym to dwa osobne swiaty, wiec roznia sie
"nieco" wiecej, niz troche. :-)
i nie wszedzie sie nadaja, ale w tym wypadku ich
zastosowanie powinno byc dla Ciebie idealne.
Ekhm, referencje w C?! :-)))
Pozdrawiam
Piotr Wyderski
========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!not-for-mai
From: "Piotr Nabielec" <eloy_at_nospam_go2.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 16:25:07 +0200
Hej,
Ekhm, referencje w C?! :-)))
Uuuups... :)
Zapomnialem, ze taki jezyk jeszcze istnieje :)
Pozdrawiam
Piotrek
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "marcinuh" <marcinuh_at_nospam_wp.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 14:26:02 +0200
Użytkownik "lipus" <lipciu.usunto_at_nospam_wp.pl> napisał w wiadomości
news:bgdh85$fk7$1_at_nospam_sunrise.pg.gda.pl...
wiem co oznaczaja * [...]
Nie wiesz :-p.
Proponuje wybrac sie do ksiegani po jakies "C w 24 godziny" czy cos takiego
-).
pzdr,
marcin
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!news.man.poznan.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Przemek" <masa67_at_nospam_poczta.onet.pl>
Subject: Re: keil
Date: Fri, 1 Aug 2003 15:17:24 +0200
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.
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!polsl.gliwice.pl!not-for-mai