Luckin: globalni jo? to je rada nad zlato... kdyz neco nejde. dejme to globalni...
Ilhvm: a čemu presne nerozumis na ukazatelich?
takze rychlo-kurz...
jde o to, ze kazda promenna je umistena v pameti a ma nejakou adresu... a pres tuhle adresu se taky muzes dotazet na promennou.. kdyz chces ziskat hodnotu z adresy, tak pouzijes derefenrenci (ukazatel), pokud chces ziskat adresu z promenny, tak pouzijes referenci (ampersand)
takze.. pokud hodnotu chces vratit z funkci pres parametr, tak to musis na urovni adresy, nikoli hodnoty... proto z funkce vystupuje ukazatel na promennou (adresa) a do funkce musi vstoupit to sami, cili adresa promenny (ne hodnota)
takze takto to asi chces mit
// pole je ukazatel na ukazatele proto, protoze vraci adresu a zaroven se jedna o pole
// u promennych staci pouze ukazatel
void naplPole(float** pole, int* dolni, int* horni)
{
// velikost by mela z funkce taky vystoupit, ale pokud jde jen o tohle
// tak ji muzes ponechat pouze pro tuhle funkci, ale musis se smirit s tim,
// ze pole uz nikdy neprojdes, pac nebudes znat jeho velikost
int velikost;
// lze spojit do jednoho prikazu, ale takto je to prehlednejsi
scanf("%d", &velikost);
scanf("%d", dolni);
scanf("%d", horni);
// pole se vraci z funkce pres parametr, takze pozadujes adresu
// calloc (stejne jako malloc) vraci void* (proto pretypovani na typ pole)
*pole = (float*)calloc(velikost, sizeof(float));
// podminky, cykly... pokud chces pouzivat horni a dolni promennou,
// tak musis pristoupit k hodnote tak (*horni) pripadne (*dolni) pres ukazatel
// if ( ... )
// for (...) { ... }
}
int main()
{
// vse, co se deklaruje jako ukazatel by melo byt initialitovany jako 0 (NULL)
float* pole = NULL;
int dolni, horni;
// vstupni parametr do pole jsou adresy, proto musis zadat adresy (ne hodnoty) a to
// diky referenci, ktery vraci adresu promenny/ukazatele
naplPole(&pole, &dolni, &horni);
free(pole);
return EXIT_SUCCESS;
}
doufam ze to uz je trochu jasny