Ahoj potrebuju poradit s timto:
may ('B'); //Skutecny argument ma typ char
char * may(const char *);
template<class T> void may (T *);
v knize je napsano, ze nebude bybrana ani jedna z techt funkci, protoze celociselna hodnota nemuze být implicitne konvertovana na ukazatelovy typ
A proto se chci zeptat co mysli tim celociselna hodnota kdyz je tam hodnota typu char
Fórum › C / C++
Funkce
sexmachina
A proto se chci zeptat co mysli tim celociselna hodnota kdyz je tam hodnota typu char
char je celočíselný typ, podobně jako int, či long. Akorát se liší svou šířkou – char zabírá jeden byte, int čtyři a long by měl myslím osm (po long je myslím ještě long long, který zabírá 16 bytů? (ostatní kdyžtak opraví)) – a také se liší obvyklým zápisem ('A' pro char vs. např. 15862 pro int apod.).
Pojem „celočíselný typ“ se používá většinou až pro ty vícebytové reprezentace, ale nevidím nic špatného na tom, aby se charu také říkalo celočíselný typ, když doopravdy reprezentuje celé číslo.
Ano takze char je take cislo ale to cislo odpovida hodnote ASCI tabulce nebo ne?
sexmachina
Ano takze char je take cislo ale to cislo odpovida hodnote ASCI tabulce nebo ne?
Áno. Navíc v případě escape sekvence ('\0', '\n', '\r', '\t' atd.) odpovídá té sekvenci.
To bukaj : podľa mna by sa char nemal nazývať celočíselnym typom, pretože reprezentuje len znak. Ak by sme išli touto logikou, tak všetko môžeš prečítať ako číslo.
v tej chybovej hláške by som videl iný zmysel. Tá funkcia očakáva pointer, resp adresu. To je akoby sa ťa niekto pýtal "kde to je" ? a ty odpovieš "7". Ale v C++ je taka logika, že ak ukazuješ na nejake miesto v pamati, tak pomocou operatora [] sa posuvaš ďalej a hura mame z toho akési pole. Takže:
may("abc"); // "abc" = const char*
char mojepole[] = "def"; //dlho som nerobil v C++, nevybavujem si presnu syntax
may(mojePole);
mephi
podľa mna by sa char nemal nazývať celočíselnym typom, pretože reprezentuje len znak
char je celé číslo šířky jednoho bytu a to mi nerozmluvíš! :o)
v tej chybovej hláške by som videl iný zmysel
Taky si přečti, na co jsem odpovídal. sexmachina se divil, že se tam baví o celočíselném typu, když je tam char – asi očekával int, či podobně –, tak jsem pouze psal, že podle mě char celočíselný typ je.
Tá funkcia očakáva pointer, resp adresu.
Tvrdím snad někde něco jiného?
Ale v C++ je taka logika, že ak ukazuješ na nejake miesto v pamati, tak pomocou operatora [] sa posuvaš ďalej a hura mame z toho akési pole.
Nepoučuj mě tu a radši se podívej, na co jsem přesně odpovídal ;o)
takže zrejme celociselna hodnota sa skor mysli ako nejaka konkretna hodnota, a nie adresa
A znovu… Tvrdím snad někde něco jiného? :o)
To bukaj :
char je celé číslo šířky jednoho bytu a to mi nerozmluvíš! :o)
Ano, ale celá čísla nereprezentuje, nýbrž je jimi reprezentován. Anžto to nemůžeš nazývat celočís. typem. :-)
midin
Ano, ale celá čísla nereprezentuje, nýbrž je jimi reprezentován.
Neslovíčkař, prosímtě :o) A co tedy reprezentuje? Znak říkáš? Myslím si, že v dnešním světě vícebytových kódování toto již trochu pozbývá smyslu, ne? Pro mě je char prostě jeden byte, ať má podle kohokoli reprezentovat cokoli ;o)
Navíc, pokud se v C mluví o typech, tak neexistuje žádná specielní kolonka „znakové typy“, char je vždycky uváděn mezi integer types – celočíselnými typy.
To bukaj : Preto som to oddelil tym riadkom, lebo to už nie je venovane tebe. Ale vidim že sa chceš hadať. Char je znak, bol a bude, keď tak si to hoď do slovnika :) cout << 'a' , no neviem ale výpis z konzoly je tušim jednoznačny.
((char)97) = 'a'. char nie je čislo. :P
Pro všechny, kteří milují pře, zde http://forum.builder.cz/read.php?123,2697285,2697399#msg-2697399 je možnost sledovat podobnou diskusi na builder.cz.
To mephi : char je celočíselný typ, který je má délku jednoho byte. Pomocí jednoho byte se reprezentují znaky, proto se tento celočíselný typ pojmenoval char. To, že cout si je vědom toho, že celočíselný typ char se používá nejčastěji k reprezentaci znaku a je podle toho zařízen (= přetížen), není důvod měnit zažité pořádky, terminologii a klasifikaci :P
midin napsal:
To bukaj :char je celé číslo šířky jednoho bytu a to mi nerozmluvíš! :o)
Ano, ale celá čísla nereprezentuje, nýbrž je jimi reprezentován. Anžto to nemůžeš nazývat celočís. typem. :-)
špatný výklad - char reprezentuje čísla, ale protože je to jediný typ, který uchovává tolik dat, kolik je potřeba k uložení jednoho znaku, využívá se k reprezentaci znaků :P
To, že cout si je vědom toho, že celočíselný typ char se používá nejčastěji k reprezentaci znaku a je podle toho zařízen
Char sa vždy použiva k reprezentaci znakov. Do pamäte nemozes napisat 'a', musis sa obmedzit na 01100001. tento binarny zapis zeprezentuje pismeno 'a', pretože je uloženy ako typ CHAR. Ak by to bol int tak by to bolo cele čislo, ak int* tak pointer na čislo.
char reprezentuje čísla, ale protože je to jediný typ, který uchovává tolik dat, kolik je potřeba k uložení jednoho znaku, využívá se k reprezentaci znaků
ak to skratim: char reprezentuje čísla, ale využíva sa k reprezentacii znakov. na zamyslenie :-D
ok kašlem na to, veď všetci vieme ako to tam funguje :) btw ako je anglicky slovo "celočíselný" ?
Integer je preklad slova "cele cislo", adjektivum je Integral.
To mephi : Já používám char i k reprezentaci čísel, pokud mi stačí 1 byte. Char se nemusí používat k reprezentaci znaků. Pokud ho ty používáš výhradně k reprezentaci znaků, neznamená to, že je to tak i u ostatních lidí ;)
Char prostě celočíselný typ je, důvody jsem ti zde už uvedli, jestli pořád nechceš uvěřit, přečti si
http://programujte.com/index.php?akce=clanek&cl=2005041404-c++-2-lekce
http://www.nti.tul.cz/wiki/images/a/a7/PJC_JednoducheTypy.pdf
http://www.builder.cz/art/cpp/clanek1666892044.html
jsou (dejme tomu...) dvě skupiny číselných datových typů:
1) celočíselné
2) reálné
myslím, že rozdíl je jasný. Jsou rozdělené podle způsobu reprezentace hodnoty, nikoliv podle toho, jak s nimi cout a cin nakládá (jak ty pořád argumentuješ).
mephi napsal:
To bukaj : podľa mna by sa char nemal nazývať celočíselnym typom, pretože reprezentuje len znak. Ak by sme išli touto logikou, tak všetko môžeš prečítať ako číslo.
koukám, že ty jsi na to přece jenom přišel už na začátku :-) ano, všechno je číslo. Jen něco je konstanta, něco je reálný typ (určitě víš, že double se reprezentuje jiným způsobem, než celočíselné typy...), něco je struktura ... a něco je celočíselný typ (protože je to prostě celé číslo uložené v určitém počtu bytů). A podle toho se řídí kompilátor (proto nelze proměnné různých typů míchat, proto ta hláška kompilátoru v prvním příspěvku). Způsob nakládání s proměnnou je už pak na programátorovi.
a do třetice:
chápej, že všechny celočíselné typy jsou číslo v paměti, pak už záleží na programátorovi, jak si ho vytiskne na obrazovku, jestli jako znak, více znaků, číslo, obrázek nebo video. Ty se pořád necháváš mást tím, jak cin defaultně tiskne char na obrazovku a vůbec nebereš v úvahu, že se chary dají sčítat, odčítat, násobit, dělit... jasný? :D
no ak pouzivas char aj ako cislo tak to beriem, btw v C# existuje typ Byte, ale keďže mam za sebou vyčerpavajuci boj s MS SQL serverom a niesme v .NET sekcii tak to nechajme. :))
mephi napsal:
no ak pouzivas char aj ako cislo tak to beriem, btw v C# existuje typ Byte, ale keďže mam za sebou vyčerpavajuci boj s MS SQL serverom a niesme v .NET sekcii tak to nechajme. :))
ano, v C# je to naprosto odlišné.
V c++ je taky typ byte. Obsahuje prekvapive jeden bajt, tedy 8 bitu informaci :)
Tak kdyz jste se tu tak zapovidali tak mi jeste vysvetlete co znamena kdyz se rekne vlozena funkce(inline) dik
To je funkce, jejiz obsah se pri kompilaci vlozi primo do kodu, kde jsou jeji volani. Z
inline double SinCos(double x){
return sin(cos(x));
}
.
.
.
z = y + SinCos(x);
.
.
.
tedy vzniknez = y + sin(cos(x));
V zasade se tim da dosahnout toho sameho ceho s makry.
Z logiky veci tedy vyplyva, ze by inline funkce mely byt jednoduche, jinak by zacalo dochazet ke zbytecnemu nafukovani kodu (i kdyz zase samozrejme muzou byt slozitejsi nez ten muj priklad). Pouziva se to na ruzne pomucky pro vypocty a tak.
sexmachina napsal:
Tak kdyz jste se tu tak zapovidali tak mi jeste vysvetlete co znamena kdyz se rekne vlozena funkce(inline) dik
K tomu najdeš veľa materialov na nete, lepšia otazka by bola Ake su vyhody inline f-cii. Su rychejšie ? Menšia spotreba sys. prostriedkov pri mnohonasobnom volani ? ale to by chcelo druhe vlakno, pretože tu to je offtopic.
CommanderZ napsal:
V c++ je taky typ byte. Obsahuje prekvapive jeden bajt, tedy 8 bitu informaci :)
C++ standard myslím žádný datový typ byte nepodporuje, možná je to vlastnost tvého kompilátoru? (a navíc je to určitě obyčejný typedef-> typedef unsigned char BYTE)
Vyhody voci makram
> Su rychejšie ?
nie
> Menšia spotreba sys. prostriedkov pri mnohonasobnom volani ?
nie
Voci normalnym funkcia (za predpokladu ze sa vlozene funkcie skutocne
vlozia do kodu, co nieje zarucene)
> Su rychejšie ?
ano, funkcia sa nevola, a netreba kopirovat parametre na zasobnik
> Menšia spotreba sys. prostriedkov pri mnohonasobnom volani ?
ano a ani netreba mnohonasobne volanie (parametre sa nemusia kopirovat na zasobnik)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Volání funkce z jiné třídy ukazatelem typu obecné funkce — založil pretis
šablonová funkce jako členská funkce třídy - jde to? — založil yaqwsx
C Funkce jako parametr funkce — založil František Brámek
Moderátoři diskuze