-
1. Data: 2014-01-13 14:28:18
Temat: pryszcze...
Od: "inny punkt siedzenia..." <N...@g...pl>
jak zdefiniować wskaźnik do funkcji w C/C++?
co to jest:
int *funkcja(int param1)
co to jest to:
int **funkcja(int param1)
no i jak tego użyć w programie, też z ******?
-
2. Data: 2014-01-13 14:48:48
Temat: Re: pryszcze...
Od: g...@g...com
Juz ktos chyba kiedys na to odpowiedzial:
http://pl.cpp.wikia.com/wiki/FAQ#Typ_wska.C5.BAnika_
na_funkcj.C4.99.2Ftyp_wska.C5.BAnika_na_metod.C4.99_
i_u.C5.BCycie
-
3. Data: 2014-01-13 14:52:35
Temat: Re: pryszcze...
Od: g...@g...com
W dniu poniedziałek, 13 stycznia 2014 14:28:18 UTC+1 użytkownik inny punkt
siedzenia... napisał:
> jak zdefiniowa� wska�nik do funkcji w C/C++?
int (*fp)(int), jezeli funkcja ma pobierac inta i zwracac inta
> co to jest:
>
> int *funkcja(int param1)
funkcja ktora pobiera inta i zwraca wskaznik na inta
> co to jest to:
>
> int **funkcja(int param1)
funkcja ktora pobiera inta i zwraca wskaznik na wskaznik na inta
> no i jak tego u�y� w programie, te� z ******?
funkcje wywolujesz normalnie (tzn. bez *****). na typ wyniku musisz
zwracac uwage tylko jesli chcesz go przypisac do jakiejs innej zmiennej
-- wowczas w pierwszym przypadku musialaby to byc zmienna typu int *,
a w drugim -- typu int **.
-
4. Data: 2014-01-13 14:57:00
Temat: Re: pryszcze...
Od: "inny punkt siedzenia..." <N...@g...pl>
no ale nie rozumiem, te wywołania to wskaźniki na inta, a jak zrobić żeby
funkcja była wskaźnikiem, trochę nie czaję tej zagadki...
-
5. Data: 2014-01-13 15:01:25
Temat: Re: pryszcze...
Od: g...@g...com
W dniu poniedziałek, 13 stycznia 2014 14:57:00 UTC+1 użytkownik inny punkt
siedzenia... napisał:
> no ale nie rozumiem, te wywo�ania to wska�niki na inta, a jak zrobi� �eby
> funkcja by�a wska�nikiem, troch� nie czaj� tej zagadki...
Funkcja nie moze byc wskaznikiem. Funkcja to funkcja, a wskaznik
to wskaznik.
Wezmy cos takiego:
int f(int n) { return n + n; }
int g(int n) { return n * n; }
int main() {
int (*fp)(int);
fp = f;
printf("%d\n", fp(5)); // wypisze 10
fp = g;
printf("%d\n", fp(5)); // wypisze 25
return 0;
}
-
6. Data: 2014-01-13 15:18:44
Temat: Re: pryszcze...
Od: "inny punkt siedzenia..." <N...@g...pl>
o dzięki, dobry edukacyjni przykład,
int (*fp)(int);
ale tego nie rozumiem, co to jest deklaracja?
-
7. Data: 2014-01-13 15:38:51
Temat: Re: pryszcze...
Od: g...@g...com
W dniu poniedziałek, 13 stycznia 2014 15:18:44 UTC+1 użytkownik inny punkt
siedzenia... napisał:
> o dzi�ki, dobry edukacyjni przyk�ad,
>
> int (*fp)(int);
>
> ale tego nie rozumiem, co to jest deklaracja?
Deklaracja to ustalenie dla danej zmiennej albo funkcji
jej typu.
Ogromna zaleta i jednoczesnie wada jezyka C jest
tak zwany statyczny system typow, w ktorym typy sa
zwiazane ze zmiennymi (a nie -- jak to ma miejsce
w jezykach dynamicznych w rodzaju Pythona, PHP,
JavaScriptu, Ruby'ego czy wielu dialektow Lispa
-- wartosciami).
Przed przypisaniem zmiennej wartosci trzeba
okreslic, jakiego typu wartosci dana zmienna
bedzie mogla przechowywac. Na tej podstawie
kompilator moze wywnioskowac, jakie rzeczy
mozna z owa zmienna robic. Na przyklad, poniewaz
liczb calkowitych nie mozna wywolywac, jezeli
zadeklarujesz zmienna z jako int,
int z;
to jesli potem (w kontekscie uzycia tej zmiennej)
bedziesz chcial napisac z(5), to kompilator bedzie
mial do Ciebie (calkiem sluszne) pretensje, ze tak
nie wolno.
W kazdym razie, jesli nie wiesz, co to jest deklaracja,
a chcesz programowac w C, to koniecznie przeczytaj
ksiazke Briana Kernighana i Dennisa Ritchie
pt. "Jezyk ANSI C".
-
8. Data: 2014-01-13 15:46:06
Temat: Re: pryszcze...
Od: A.L. <a...@a...com>
On Mon, 13 Jan 2014 06:38:51 -0800 (PST), g...@g...com
wrote:
>W dniu poniedziałek, 13 stycznia 2014 15:18:44 UTC+1 użytkownik inny punkt
siedzenia... napisał:
>> o dzi�ki, dobry edukacyjni przyk�ad,
>>
>> int (*fp)(int);
>>
>> ale tego nie rozumiem, co to jest deklaracja?
>
>Deklaracja to ustalenie dla danej zmiennej albo funkcji
>jej typu.
>Ogromna zaleta i jednoczesnie wada jezyka C jest
>tak zwany statyczny system typow,
To nie WADA, to ZALETA. Systemy z dynamicznymi typami nadaja sie co
najwyzej do pisania programow studenckich
A.L.
-
9. Data: 2014-01-13 16:19:37
Temat: Re: pryszcze...
Od: g...@g...com
W dniu poniedziałek, 13 stycznia 2014 15:46:06 UTC+1 użytkownik A. L. napisał:
> On Mon, 13 Jan 2014 06:38:51 -0800 (PST), g...@g...com
> wrote:
[...]
> >Ogromna zaleta i jednoczesnie wada jezyka C jest
> >tak zwany statyczny system typow,
>
> To nie WADA, to ZALETA. Systemy z dynamicznymi typami nadaja sie co
> najwyzej do pisania programow studenckich
Statyczna kontrola typow ma taka zalete, ze zwieksza
niezawodnosc oprogramowania i pozwala uniknac calej klasy
bledow, ktore w innym razie moga zamanifestowac sie dopiero
wtedy, kiedy zostanie wykonana bledna sciezka w programie
(co czasem moze sie zdarzyc na dlugo po umieszczeniu go na
produkcji)
Ma jednak taka wade, ze utrudnia pisanie kodu generycznego
(a rozwiazanie oferowane przez C++ wyglada na ponury dowcip)
i generalnie czesto wymaga pisania wiecej, niz to potrzebne.
Wspolczesnie uzycie jezykow z dynamicznym typowaniem
zdecydowanie dominuje, i to nie tylko w programach
studenckich, ale np. w zdecydowanej wiekszosci projektow
webowych (ktore zazwyczaj tworzy sie w PHP, Pythonie
albo Rubym) albo w wielu projektach naukowych (do ktorych
stosuje sie np. Matlab). Nie wspominajac np. o licznych
skryptach, konwerterach i ekstraktorach, ktore sie zazwyczaj
pisze w perlu, awku czy skryptach powloki.
Mysle, ze gdyby w projektach tego rodzaju system typow
naprawde dawal tak wielkie korzysci, to by go tak latwo
nie zmarginalizowano.
-
10. Data: 2014-01-13 17:30:26
Temat: Re: pryszcze...
Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
On 2014-01-13, g...@g...com <g...@g...com> wrote:
> W dniu poniedziałek, 13 stycznia 2014 15:46:06 UTC+1 użytkownik A. L. napisał:
>> On Mon, 13 Jan 2014 06:38:51 -0800 (PST), g...@g...com
>> wrote:
> [...]
>> >Ogromna zaleta i jednoczesnie wada jezyka C jest
>> >tak zwany statyczny system typow,
>>
>> To nie WADA, to ZALETA. Systemy z dynamicznymi typami nadaja sie co
>> najwyzej do pisania programow studenckich
>
> Statyczna kontrola typow ma taka zalete, ze zwieksza
> niezawodnosc oprogramowania i pozwala uniknac calej klasy
> bledow, ktore w innym razie moga zamanifestowac sie dopiero
> wtedy, kiedy zostanie wykonana bledna sciezka w programie
> (co czasem moze sie zdarzyc na dlugo po umieszczeniu go na
> produkcji)
>
> Ma jednak taka wade, ze utrudnia pisanie kodu generycznego
> (a rozwiazanie oferowane przez C++ wyglada na ponury dowcip)
> i generalnie czesto wymaga pisania wiecej, niz to potrzebne.
Widać z daleka, że nie oglądałeś na oczy SML-a, Haskella ani Erlangowego
Dialyzera.
No i nie wiem jak w twój kod, ale mój często pracuje na złożonych
strukturach danych. Deklaracje typów dają mi -- nawet jeśli nic poza
tym -- systematyczną dokumentację co która funkcja przyjmuje i co
zwraca.
> Wspolczesnie uzycie jezykow z dynamicznym typowaniem
> zdecydowanie dominuje
[...]
> Mysle, ze gdyby w projektach tego rodzaju system typow
> naprawde dawal tak wielkie korzysci, to by go tak latwo
> nie zmarginalizowano.
Bo najpierw trzeba umieć korzystać z systemu typów. Zgadnij, dlaczego do
Erlanga, języka z dynamicznym systemem typów, w toku ewolucji *dodano*
elementy pozwalające na deklarowanie i dedukcję typów?
I dodatkowo: http://ro-che.info/ccc/17
--
Secunia non olet.
Stanislaw Klekot