Funkce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Funkce – C / C++ – Fórum – Programujte.comFunkce – C / C++ – Fórum – Programujte.com

 

sexmachina
~ Anonymní uživatel
37 příspěvků
8. 8. 2008   #1
-
0
-

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

Nahlásit jako SPAM
IP: 88.83.169.–
bukaj0
Věrný člen
8. 8. 2008   #2
-
0
-

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.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
sexmachina
~ Anonymní uživatel
37 příspěvků
8. 8. 2008   #3
-
0
-

Ano takze char je take cislo ale to cislo odpovida hodnote ASCI tabulce nebo ne?

Nahlásit jako SPAM
IP: 88.83.169.–
bukaj0
Věrný člen
8. 8. 2008   #4
-
0
-

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.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
mephi0
Expert
8. 8. 2008   #5
-
0
-

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);

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
mephi0
Expert
8. 8. 2008   #6
-
0
-

takže zrejme celociselna hodnota sa skor mysli ako nejaka konkretna hodnota, a nie adresa (co je tiez len cislo).

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
bukaj0
Věrný člen
9. 8. 2008   #7
-
0
-

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)

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
midin0
Věrný člen
9. 8. 2008   #8
-
0
-

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. :-)

Nahlásit jako SPAM
IP: 85.70.229.–
Zápisky z dění na FB (momentálně ve vývoji): http://fbpd.ic.cz/
bukaj0
Věrný člen
9. 8. 2008   #9
-
0
-

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.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
mephi0
Expert
10. 8. 2008   #10
-
0
-

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

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
midin0
Věrný člen
10. 8. 2008   #11
-
0
-
Nahlásit jako SPAM
IP: 85.70.229.–
Zápisky z dění na FB (momentálně ve vývoji): http://fbpd.ic.cz/
Vojtěch Havel
~ Anonymní uživatel
20 příspěvků
10. 8. 2008   #12
-
0
-

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

Nahlásit jako SPAM
IP: 213.211.34.–
Vojtěch Havel
~ Anonymní uživatel
20 příspěvků
10. 8. 2008   #13
-
0
-

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

Nahlásit jako SPAM
IP: 213.211.34.–
mephi0
Expert
11. 8. 2008   #14
-
0
-

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ý" ?

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
11. 8. 2008   #15
-
0
-

Integer je preklad slova "cele cislo", adjektivum je Integral.

Nahlásit jako SPAM
IP: 78.102.164.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
Vojtěch Havel
~ Anonymní uživatel
20 příspěvků
11. 8. 2008   #16
-
0
-

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š).

Nahlásit jako SPAM
IP: 213.211.34.–
Vojtěch Havel
~ Anonymní uživatel
20 příspěvků
11. 8. 2008   #17
-
0
-

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.

Nahlásit jako SPAM
IP: 213.211.34.–
Vojtěch havel
~ Anonymní uživatel
20 příspěvků
11. 8. 2008   #18
-
0
-

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

Nahlásit jako SPAM
IP: 213.211.34.–
mephi0
Expert
12. 8. 2008   #19
-
0
-

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. :))

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Vojtěch Havel
~ Anonymní uživatel
20 příspěvků
13. 8. 2008   #20
-
0
-

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é.

Nahlásit jako SPAM
IP: 213.211.34.–
13. 8. 2008   #21
-
0
-

V c++ je taky typ byte. Obsahuje prekvapive jeden bajt, tedy 8 bitu informaci :)

Nahlásit jako SPAM
IP: 78.102.164.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
sexmachina
~ Anonymní uživatel
37 příspěvků
13. 8. 2008   #22
-
0
-

Tak kdyz jste se tu tak zapovidali tak mi jeste vysvetlete co znamena kdyz se rekne vlozena funkce(inline) dik

Nahlásit jako SPAM
IP: 88.83.169.–
13. 8. 2008   #23
-
0
-

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 vznikne
z = 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.

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
mephi0
Expert
13. 8. 2008   #24
-
0
-

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.

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Vojtěch Havel
~ Anonymní uživatel
20 příspěvků
13. 8. 2008   #25
-
0
-

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)

Nahlásit jako SPAM
IP: 212.96.172.–
AdamHlavatovic0
Stálý člen
13. 8. 2008   #26
-
0
-

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)

Nahlásit jako SPAM
IP: 217.73.16.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 18 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý