Ahoj, zkoumam jeden open-source kod (FileZilla Server) a casto tam byva nasledujici kod a jemu velice podobny:
BOOL CUsersListCtrl::ParseUserControlCommand(unsigned char *pData, DWORD dwDataLength)
{
int type = *pData;
if (type < 0 || type > 4)
proste hlavicka nejake funkce.. v ni je deklarovana promenna typu Integer a pak je initializovana Pointerem pData, ktery je pak v pripade pouzivani metody implementovany takto: unsigned char *pData=new unsigned char[4096];
jde mi o to, ze kdyz podobny kod otestuji (jen malou testovaci aplikaci), tak ten Integer "type" - (z kodu) hodi nejake nesmyslne cislo napr. 585736329176252, pritom v kodu rovnou porovnavaji jestli "type" je mensi nez nula nebo vetsi nez ctyri..
pod nim je pak dlouhy switch, kde se porovnava jestli je "type" 0, 1, 2 nebo 3 nebo default..
pritom me ten "type" vzdycky vyjde uplne nesmyslne dlouhy cislo. Rozumi tomu nekdo prosim?
C++ otazka na Integer Promennou
Re: C++ otazka na Integer Promennou
tomu type je předána adresa,tím se type nastaví na nějakou hodnotu. "int type" je pouze pomocná proměnná.
Re: C++ otazka na Integer Promennou
preda se ji adresa to Pointeru? Proc ji ale potom porovnavaji, jestli je ta adresa cislo 1,2,3, nebo 4, kdyz ta adresa toho pointeru vychazi naky dlouhy cislo napr. 538757284874 - zkousel jsem vytvorit neco podobneho napr:
unsigned char *test = new char[4096];
int zkouska=test;
cout<<zkouska;
a vyjde to dlouhe cislo. Nemaji v tom kodu nejaky jiny trik, ze jim vyjde jen neco kratsiho, jako 1, 2, 3 nebo 4 apod..
unsigned char *test = new char[4096];
int zkouska=test;
cout<<zkouska;
a vyjde to dlouhe cislo. Nemaji v tom kodu nejaky jiny trik, ze jim vyjde jen neco kratsiho, jako 1, 2, 3 nebo 4 apod..
Re: C++ otazka na Integer Promennou
To co zkoušíš je pořád to samý(špatně).
Koukni na nějaký základy,třeba tady:
http://www.linuxsoft.cz/article.php?id_article=394
http://www.cplusplus.com/doc/tutorial/variables/
http://www.cprogramming.com/tutorial/lesson6.html
Koukni na nějaký základy,třeba tady:
http://www.linuxsoft.cz/article.php?id_article=394
http://www.cplusplus.com/doc/tutorial/variables/
http://www.cprogramming.com/tutorial/lesson6.html
Re: C++ otazka na Integer Promennou
diky za odkazy, procetl jsem si je, ale k tomu mymu dotazu tam presto nic neni. Nechapu totiz proc je k integeru prirazenej pointer. Proc to jako v tom kodu takhle implementovali, je mi jasny, ze ten pointer ukazuje na nejakou adresu v pameti, a kdyz ho priradim k integeru, tak se divim, ze to compiler nehlasi a za druhy, nechapu jak jim tohle prirazeni mohlo vyhodit tak nizke cislo. Jinde jsem takoveto prirazeni jeste nevidel.
Re: C++ otazka na Integer Promennou
zakladni rozdil v tom kodu je, ze oni maj ten char v pameti alokovany pravdepodobne mallocem a predavany jako pointer
do intu se pak neulozi pointer, ale hodnota v pameti kam ukazuje pointer
ten kod co jsi psal naopak Ty ma statcike pole char, tedy s tim se pracuje trosku jinak
a pak samozrejme neprirazujes obsah pameti ( int test = * pointer) ale hodnotu pointeru
do intu se pak neulozi pointer, ale hodnota v pameti kam ukazuje pointer
ten kod co jsi psal naopak Ty ma statcike pole char, tedy s tim se pracuje trosku jinak
a pak samozrejme neprirazujes obsah pameti ( int test = * pointer) ale hodnotu pointeru
if (count(legs)==6) bug
else feature;
Dvě monarchie v nejednotné Evropě...
Dvě koloniální říše v neklidném světě 23. století...
Jaderné mocnosti s historií osmi vzájemných válek...
Federativna kraljevina Jugoslavija a Císařství České
else feature;
Dvě monarchie v nejednotné Evropě...
Dvě koloniální říše v neklidném světě 23. století...
Jaderné mocnosti s historií osmi vzájemných válek...
Federativna kraljevina Jugoslavija a Císařství České
Re: C++ otazka na Integer Promennou
myslim, ze uz jsem na neco prisel, tak to zde napisi. Jedna se jeste o jeden jednoduchy kod, ktery jsem odzkousel:
unsigned char *test = new unsigned char[4096];
test[0]=1;
test[1]=3;
test[2]=4;
test[3]='a';
test[4]='b';
test[5]='c';
int zkouska=*test;
cout<<zkouska;
v tomto pripade je pri prirovnani "zkouska=*test;" vysledek promenne zkouska cislo 1. Takze timto zbusobem pouzivali nejspise toto prirovnani i v kodu, ktery zkoumam...
v podstate kod "int zkouska=*test;" je tentyz jako "int zkouska=test[0];" , ze?
akorat je mi divne, ze prirovnani test[0]=1; funguje bez problemu, vlastne k characteru prirovnam hodnotu integeru a compiler to bez problemu compiluje na spravnou hodnotu charcteru - tedy cislo 1.
unsigned char *test = new unsigned char[4096];
test[0]=1;
test[1]=3;
test[2]=4;
test[3]='a';
test[4]='b';
test[5]='c';
int zkouska=*test;
cout<<zkouska;
v tomto pripade je pri prirovnani "zkouska=*test;" vysledek promenne zkouska cislo 1. Takze timto zbusobem pouzivali nejspise toto prirovnani i v kodu, ktery zkoumam...
v podstate kod "int zkouska=*test;" je tentyz jako "int zkouska=test[0];" , ze?
akorat je mi divne, ze prirovnani test[0]=1; funguje bez problemu, vlastne k characteru prirovnam hodnotu integeru a compiler to bez problemu compiluje na spravnou hodnotu charcteru - tedy cislo 1.
Re: C++ otazka na Integer Promennou
protoze CHAR neni nic jineho nez celociselna promenna o velikosti 1byte, ktera obsahuje ASCII cislo znaku
tedy 'A' je reprezentovano 65, 'a' 97.. atd.
do retzece timhle zpusobem neukladas znak '1', ale ASCII znak s poradovym cislem 1 coz je Start of Heading (viz Ascii tabulka).
Jinak samozrejme je tohle nebezpecny a nedoporucovany zpusob a vetsina novych kompilatoru by Ti mela aspon vyhodit warning.
tedy 'A' je reprezentovano 65, 'a' 97.. atd.
do retzece timhle zpusobem neukladas znak '1', ale ASCII znak s poradovym cislem 1 coz je Start of Heading (viz Ascii tabulka).
Jinak samozrejme je tohle nebezpecny a nedoporucovany zpusob a vetsina novych kompilatoru by Ti mela aspon vyhodit warning.
if (count(legs)==6) bug
else feature;
Dvě monarchie v nejednotné Evropě...
Dvě koloniální říše v neklidném světě 23. století...
Jaderné mocnosti s historií osmi vzájemných válek...
Federativna kraljevina Jugoslavija a Císařství České
else feature;
Dvě monarchie v nejednotné Evropě...
Dvě koloniální říše v neklidném světě 23. století...
Jaderné mocnosti s historií osmi vzájemných válek...
Federativna kraljevina Jugoslavija a Císařství České
Re: C++ otazka na Integer Promennou
dobra, dekuji za vysvetleni, takze podle vseho muselo byt v retezci char znaku (alokovane pointerem pData) na prvnim miste retezce cele cislo (integer - tedy napr. 1, 2, 3..), ne? Jinak by kod z uplne prvniho prispevku (viz. int type = *pData;) nedaval zadny smysl..
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti