Zdravim, mohl by mi nekdo vysvetlit jak funguje toto pred promenou?
*(Bool*) promena;
#1 Anonym
Jedna se o ziskani hodnoty typu bool na adrese predane ve void pointeru. Ziskani hodnoty je ta prvni hvezdicka. To se nazyva dereference.
Jelikoz promenna neni typu pointer na bool, ale pravdepodobne void *, tak se to musi pretypovat na pointer na bool. Coz je to (bool *) promenna;
Priklad:
bool neco = true; // co chceme predat nekam jinam
void * promenna = (void*)&neco; // do promenne si ulozime adresu promenne neco
// ... nekdy jindy nekde jinde ...
if (*((bool*)promenna)) {
// pokud hodnota true, tak proved toto...
}
Void pointery se hodne pouzivaji v C jako parametry pro callbacky (funkce predavane do jinych funkci). Napriklad pokud vytvaris nove vlakno v C, tak predas funkci, kterou ma nove vlakno zpracovavat a muzes predat i jeden parametr jako void pointer. (bool je mimochodem od standardu C99, Bool je kdo vi co)
Priklad:
void * worker(void * parametr) {
while (*((bool*)parametr)) {
// neco delej dokud je parametr true
}
return NULL;
}
// ...
bool run = true; // thread pobezi, dokud je tu true
pthread_t thread; // handler thread handler
pthread_create(&thread, NULL, worker, (void *)&run);
// ...
run = false; // thread skonci jakmile otestuje hodnotu
pthread_join(thread); // pockat na dokonceni
A co se tyce typu, tak si je musis ohlidat sam. Je klidne mozne pretypovat Slona na Stul a podobne, ikdyz to nedava vubec smysl. Nicmene oboji je tvorene atomy (bajty).
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku