Stránka 1 z 1
C - funkce,pole...
Napsal: pon 29. lis 2010, 00:59
od Václav Sedlář
Dobrý den, ve škole jsem dostal zadání:
Kód: Vybrat vše
1)napsat funkci alokuj_pole int velikost, jednorozměrné pole float, velikost je předána parametrem
pole bude vráceno jako:
a)návratová hodnota funkce
b)předáno jako parametr volaný odkazem
a já jaksi nevím rozdíl mezi a) a b)...jaká bude definice funkce a return u a,b? Moc dekuji za odpověď...
Re: C - funkce,pole...
Napsal: pon 29. lis 2010, 08:31
od arxeiss
Absolutně nechápu zadání, např toto alokuj_pole int velikost. Co to má znamenat? jako že budu mít alokuj_pole(int velikost) v něm jednorozměrné pole floatové. A pak vrátím jednou návratovou hodnotou, a podruhé parametrem?
Re: C - funkce,pole...
Napsal: pon 29. lis 2010, 12:32
od Václav Sedlář
právě...taky mi to je divný..ale je to doslova přesně opsané z tabule
edit: jelikož pak budeme dál v programu dělat s dvěma polema, tak to asi bude jako alokovat jedno pole o velikosti int a pak ještě jedno pole float (asi)...a pro jedno bude platit za a) a pro druh= za b)...
Re: C - funkce,pole...
Napsal: pon 29. lis 2010, 12:39
od zombux
jo tohle jsme kdysi dělali, jen jsem to už dokonale zapomněl. Heroutova učebnice céčka to vysvětluje detailně, nalistuj

Re: C - funkce,pole...
Napsal: pon 29. lis 2010, 16:26
od Saphire
Václav Sedlář píše:...
V kroku A se vrátí pole tak jak je, zatímco v kroku B se pole zapíše do ukazatele, předáného funkci jako argument.
Re: C - funkce,pole...
Napsal: pon 29. lis 2010, 17:01
od arxeiss
Saphire píše:V kroku A se vrátí pole tak jak je, zatímco v kroku B se pole zapíše ADRESA POLEdo ukazatele, předáného funkci jako argument.
Ti tam chybělo, a je to rozdíl! Ale stejně nechápu logiku bodu A, tam si musíš vytvořit to pole jak v mainu, tak v té funkci, a pak po naplnění ho vrátíš do mainu, ale tam se musí někam uložit, takže je alokované 2x... U B už je to logické, tam si ho vytvoříš v poli a pak v mainu pracuješ už jenom s pointrem.
Re: C - funkce,pole...
Napsal: pon 29. lis 2010, 18:29
od Václav Sedlář
mno takto je celé zadáni:
Kód: Vybrat vše
1)napsat funkci alokuj_pole int velikost, jednorozměrné pole float, velikost je předána parametrem pole bude vráceno jako:
a)návratová hodnota funkce
b)předáno jako parametr volaný odkazem
2)funkci napln_pole která naplní pole jakkoliv
3)funkci, která převezme jako parametry dvě pole (vytvořené funkcí výše) a porovná je na základě hodnot v poli uložených. Bude vracet:
a)0...pokud jsou pole stejná
b)1..pokud v poli 1 jsou vyšší hodnoty
c)2..pokud jsou hodnoty v poli1 nižší
4)funkci co vypočte vážený průměr (váhy volte dle vlastního uvážení) z hodnot ullžených v poli
Re: C - funkce,pole...
Napsal: úte 30. lis 2010, 11:31
od Maranov
Jako návratová funkce:
Kód: Vybrat vše
float *alokuj_pole(int velikost)
{
return malloc(sizeof(float) * velikost);
}
Funkce alokuje dynamicky pole a předá adresu na něj v return.
Kód: Vybrat vše
void alokuj_pole(int velikost, float** pole)
{
*pole = malloc(sizeof(float) * velikost);
}
To samé v parametru předávaného odkazem (vstupně-výstupní parametr).
Takhle to chápu já. Klasické array předat nemůžeš, array je de facto ukazatel na první prvek a v momentě ukončení fce by pole bylo zničeno.
Re: C - funkce,pole...
Napsal: úte 30. lis 2010, 17:28
od Václav Sedlář
ok, děkuji...zkusím...

Re: C - funkce,pole...
Napsal: stř 1. pro 2010, 14:06
od Václav Sedlář
Maranov píše:Jako návratová funkce:
Kód: Vybrat vše
float *alokuj_pole(int velikost)
{
return malloc(sizeof(float) * velikost);
}
píše chybu:
Kód: Vybrat vše
Error 1 error C2440: 'return' : cannot convert from 'void *' to 'float *'
Re: C - funkce,pole...
Napsal: stř 1. pro 2010, 14:34
od Saphire
Než to vrátíš, musíš to ještě přetypovat na float*.
Kód: Vybrat vše
float *alokuj_pole(int velikost)
{
return (float*)malloc(sizeof(float) * velikost);
}
Re: C - funkce,pole...
Napsal: stř 1. pro 2010, 15:52
od Václav Sedlář
ok, dík...už to funguje....
jen ještě ten druhej případ:
Kód: Vybrat vše
void alokuj_pole2(int velikost, float* pole)
{
*pole = malloc(sizeof(float) * velikost);
}
ja vypadá vyvolání funkce? takto:
float *p_f;
alokuj_pole(velikost, p_f);

Re: C - funkce,pole...
Napsal: stř 1. pro 2010, 16:25
od Saphire
Ano, přesně tak!
Ale funkce musí vypadat takhle: 1) alokovanou paměť přiřazujeme do
ukazatele, nikoliv do obsahu proměnné (
*pole je obsah promenné,
pole je ukazatel)
2) lepší je VŽDY (i když je to nepovinné) přetypovávat.
Kód: Vybrat vše
void alokuj_pole2(int velikost, float* pole)
{
pole = (float*)malloc(sizeof(float) * velikost);
}