Diskuze: Vysvětlení kódu
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
p=(int*)(&a+1);
&a = adresa proměnné a
(int*) = přetypování na ukazatel na int
Do proměnné p se uloží adresa proměnné a zvýšená o velikost proměnné
typu int.
& je reference (adresa) proměnné.
Tohle je prostě jiný zápis pole (posuneš se v paměti na další prvek přičtením velikosti intu) pokud se nemýlím.
&a vrátí pointer na místo v paměti, kde je a
*p vrátí hodnotu z paměti, kam ukazuje p
jak ale pak ví co je na další pozici v paměti? chápu že pamět je jako pole, určitý počet dat s adresou ale pokud se odvoávám na adresu dál než kde je proměnná jak můžu pak vědět co vlastně čtu? když naté adrese nemám žadnou proměmnou nadeklarovanou. Teda pokud to neni součástí onoho pole pamatrů....
Hledám v tom moc věcí
áchjo kdybych já nebyl tak moc zvědavý
Vypadá to jako funkce, kam jako první parametr zadáš počet čísel, která chceš sčítat a zbylé parametry - čísla, která pak sčítáš.
Díky tomu prvnímu parametru tak víš, jak dlouho můžeš z paměti číst, abys nečetl nějaké nesmysly.
Je to klasická funkce na součet, resp co se tak narychlo koukám tak by to
mělo dělat asi sumu, součet N-krát čísla N
int "hvězdička" p skutečně je jedno kde je ta hvězdička, jestli za int, nebo před názvem, zkrátka musí bejt mezi), je pointer- ukazatel (doporučuju si o tom něco přečíst) - dat. typu integer
Pointer je dat. typ, kterej si uchovává adresu danýho typu - můžou bejt libovolný pointery- int "hvězdička", char "hvězdička", double"hvězdička", float"hvězdička", nebo klidně i void"hvězdička"(například ukazatel na funkce..)
V tomhle případě je jedno jestli to bude přes pointer/referenci, nebo ne, ten pointer by jsi využil například, kdyby jsi chtěl zapisovat do nějaký struktury/proměnný.. která by byla vně týhle funkce- bez adresy by jsi na to místo nezapsal
(int "hvězdička") je jen přetypování- protože jako parametr funkce je unsigned int (asi by se to implicitně přetypovalo, ale tohle minimálně nebude házet warning, možná taky ne, možná by to přetypovalo jen na int ne na int*, nwm, záleží na IDE)
no takže máš proměnnou, která je připravená na adresu int typu, a máš proměnnou unsigned int (int "hvězdička") přetypuješ a '&' vytáhneš adresu tý proměnný
kdyby byl argument funkce int, tak by ti stačilo int "hvězdička" p =
&a
Snad stačí
///sorry, nwm jak se tady lightuje zdroják :/
Funkcie s premennym poctom parametrov funguju vdaka tomu ze parametre funkcie
su predavane v jednom pametovom bloku (podobne ako pole, len kazdy prvok moze
mat inu velkost).
Funkcia musi mat minimalne 1 znamy parameter, v tvojom pripade je to 'unsigned
a'. Adresa premennej 'a' je na prvom mieste, za nou nasleduju postupne dalsie
premenne.
p=(int*)(&a+1);
Tento kod zobere adresu premennej 'a' ( &a ), prirata k nej 1, co znamena ze sa posunie o sizeof(a) bytov a pretypuje ju na int*, to znamena ze nasledujuca premenna ma typ int.
Treba si davat pozor na jednu vec. Poradie v akom su predavane parametre funkcie nie je v kazdom kompilatore rovnake, premenna 'a' moze byt kludne posledna a nie prva, preto sa pouzivaju na presuvanie medzi parametrami specialne makra http://en.cppreference.com/…ity/variadic
Zobrazeno 11 zpráv z 11.