Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 13 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Pretypovanie tzv. Typecasting

Registrovaný: 06.06.12
Prihlásený: 24.06.15
Príspevky: 64
Témy: 19
Bydlisko: Michalovce
Príspevok NapísalOffline : 25.07.2012 21:06

Zdravicko. Robim v jazyku C resp. ucim sa a narazil som ta taky problem. Presiel som k teme typecasting resp. pretypovanie.

pretypovanie ty ktory to vedia tak vedia o co sa jedna ty ktory to nevedia v skratke je to zmena formatu premennej v danom riadku.

pretypovanie funguje nejak takto:

(format_na_ktory_sa_ma_premenna_pretypovat) premenna

lenze ja som narazil na taky mensi problemik ze som pri tom pretypovani narazil aj na pretyp v takomto zlozeni:

(char *) premenna... (int *) premenna...


lenze neviem naco tam je ta hviezdicka. Ty ktory vedia tak pls pomozte obzvlast dakujem


Offline

Skúsený užívateľ
Skúsený užívateľ
Pretypovanie tzv. Typecasting

Registrovaný: 11.01.09
Prihlásený: 26.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 25.07.2012 21:15

Prestuduj si tento clanok: http://www.pcforum.sk/pochopenie-smerni ... 34003.html

Jedna sa o smenik, velmi dolezitu cast jazyka C, preto tomu venuj velku pozornost.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 26.07.2012 11:56

V tom čo píšeš nevidím problém. Ako píšeš, je to zmena typu premennej - to, že nevieš, že aj int* je typ, to už je tvoj problém. Funguje to ale vždy rovnako, nech je tam čokoľvek :) (Kľudne môžeš používať aj vlastné typy)
Plus, používaj radšej väzbu typ premennej - predsa len je to pretypovanie, nie preformatovanie.


Offline

Užívateľ
Užívateľ
Pretypovanie tzv. Typecasting

Registrovaný: 06.06.12
Prihlásený: 24.06.15
Príspevky: 64
Témy: 19
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 26.07.2012 13:39

ale ved toto co ty vravis int*... akoze co to je za vec? ved su 3 zakl. druhy... int, char, float. a potom su este short,long,boolean atd ale to su uz vedlajsie.

viem ze hviezdicka ako taka sluzi bud na pomenovanie ukazovatela.. ze istu premennu zmenis na ukazovatela takym sposobom ze tam das hviezdicku ALEBO ked pouzivas unarny operator dereference tak tam tiez je hviezdicka ale pri pretypovani na dajak typ (int *) toto nemam vobec sajnu o co ide.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 26.07.2012 14:04

Žiadne vedľajšie nie sú. Možno máš na mysli primitívne typy, ale to si tiež netrafil.
Prečítaj si poriadne ešte raz kapitolu "Datové typy" a potom aj ten článok od Fica.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Pretypovanie tzv. Typecasting

Registrovaný: 06.06.12
Prihlásený: 24.06.15
Príspevky: 64
Témy: 19
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 26.07.2012 14:35

okey lebo ako kukam zase sa stretavam s tymy typmi (char *) a (int *) a uz mi to lezie na nervy :D ... idem prestudovat.. len akoze zatial som sa nikde s nicim takym nestretol tak len neviem aky je to datovy typ... a btw. ten clanok datove typy... to je od koho??


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 26.07.2012 14:40

Odkiaľ sa učíš C? Presne tam určite nájdeš celú kapitolu o datových typoch. Ak nie, zahoď to a nájdi si iný zdroj/knihu.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Pretypovanie tzv. Typecasting

Registrovaný: 27.12.08
Prihlásený: 13.12.22
Príspevky: 1874
Témy: 96
Bydlisko: Bratislava,...
Príspevok NapísalOffline : 26.07.2012 14:43

* slúži na označenie smerníka (ukazovateľa, pointra), alebo ako dereferenčný operátor, v tomto prípade sa však jedná o smerník. Smerník má väčšinou tiež svoj typ (resp. typ, na ktorý smerník ukazuje), int* je smerník na premennú typu int, char* je smerník na premennú typu char. (Medzi typom premennej a hviezdičkou môže a nemusí byť medzera).

Tak isto, ako môžeš pretypovať premennú (napr. z char na int) štýlom
Kód:
char a = 'A';
int b = (int) a; // 65
, tak môžeš pretypovať aj smerník (napr. z bool* na char*) štýlom
Kód:
bool a = true;
bool *b = &a;
char *c = (char *) b;
char d = *c; // v premennej d bude teraz znak s ascii kódom 1


Avšak vo svojej podstate jazyk C umožňuje robiť aj škaredé veci ako pretypovať normálnu premennú na smerník bez akéhokoľvek varovania štýlom
Kód:
int a = 1;
int *b = (int *) a;
(smerník b bude ukazovať na adresu s označením 0x1, avšak po prístupe k tejto adrese program s vysokou pravdepodobnosťou spadne lebo tam nemá čo šahať), alebo pretypovať smerník ukazujúci na premennú veľkosti 1B na smerník ukazujúci na premennú veľkosti 4B (napr. z char* na int*), v tomto prípade však výsledný smerník nebude ukazovať na číslo rovnajúce sa ascii kódu znaku na ktorý ukazoval smerník char*. Na takéto veci však kompilátor opäť neupozorní, preto treba pred tým, ako začneš manipulovať so smerníkmi poriadne pochopiť ako fungujú (napr. z Ficovho článku)







_________________
~Listen to your brain, not your heart~
NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot)
NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI)
Offline

Užívateľ
Užívateľ
Pretypovanie tzv. Typecasting

Registrovaný: 06.06.12
Prihlásený: 24.06.15
Príspevky: 64
Témy: 19
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 26.07.2012 15:03

Kód:
bool a = true;
bool *b = &a;
char *c = (char *) b;
char d = *c; // v premennej d bude teraz znak s ascii kódom 1


otazocka smerom na

char d = *c ... tam ked si uz raz C definoval ako smernik tak je ho potrebne definovat este raz?? ptom ti kompilator vyhodi chybu nie?...

a comu som ja nechapal je presne toto:

Kód:
char *c = (char *) b;


toto (char *) ... ja som len nevedel ze co to robi ale tak asi tomu uz chapem.. ked pouzijes pretyp tvaru (char *) to znamena ze pretypujes danu premennu na format char ale takisto ju zmenis na ukazatela resp. smernik???? dobre som tomu pochopil?... no a potom je tu zasa druha vec co som teraz nasiel jednu funkciu na basic input
funkcia gets()

zaklad tej funkcie vyzera asi takto nejak
Kód:
#include <stdio.h>
char *fgets(char *buf, int size, FILE *fp);


ale teraz je tu druha otazka... len ju napisem.. kedze fgets() je funkcia... AKO DOCERTA JU MOZES PRETYPOVAT NA UKAZATELA?! omg..


Offline

Užívateľ
Užívateľ
Pretypovanie tzv. Typecasting

Registrovaný: 27.12.08
Prihlásený: 13.12.22
Príspevky: 1874
Témy: 96
Bydlisko: Bratislava,...
Príspevok NapísalOffline : 26.07.2012 15:16

Kód:
char d = *c;
V tomto riadku je * dereferenčný operátor. Keď je c premennou typu char*, tak napísaním c pristupuješ k adrese, na ktorú c ukazuje. Napísaním *c smerník dereferencuješ, teda pristupuješ k hodnote, na ktorú smerník ukazuje (a keďže je c smerník typu char*, tak sa predpokladá, že ukazuje na premennú typu char).

Ďalej musíš pochopiť že
Kód:
char* a;
Kód:
char * a;
Kód:
char *a;
sú tri zápisy tej istej veci a že hviezdička v tomto prípade má inú funkciu ako v prípade
Kód:
char a = *b;


Ďalšia vec je, že so smerníkmi môžeš narábať ako s normálnymi dátovými typmi, teda ich môžeš pretypovávať a tiež obyčajné funkcie môžu vracať nielen hodnotu, ale aj smerník na hodnotu.

Kód:
char *c = (char *) b;
je pretypovanie b z typu smerník na bool na typ smerník na char.
Kód:
char *fgets(char *buf, int size, FILE *fp);
je funkcia, ktorá vracia premennú typu smerník na char. Tu nejde o žiadne pretypovanie ale o typ návratovej hodnoty funkcie.

Pre lepšie pochopenie si prečítaj Ficov článok http://www.pcforum.sk/pochopenie-smerni ... 34003.html







_________________
~Listen to your brain, not your heart~
NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot)
NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI)
Offline

Užívateľ
Užívateľ
Pretypovanie tzv. Typecasting

Registrovaný: 06.06.12
Prihlásený: 24.06.15
Príspevky: 64
Témy: 19
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 26.07.2012 15:27

aha okey. idem kuknut na ten clanok a co sa tyka tych funkcii to je vzdy tak ze sa zapise daco pred funkciu a vsetci automaticky vedia ze taky je vystup.?
a k tomu (char *)
to som dobre pochopil ze je to pretypovanie istej premennej resp. smernika na format char a smernik ?.. ze trebarz ked dam ze

Kód:
(char *) int i;


tzn. nielen ze som "i" pretypoval na format char ale takisto som ho zmenil na smernik?
len ma uisti ci to tak je a ked nie uved veci na pravu mieru... naozaj dakujem za tu trpezlivost s mojou hlavou deravou :D


Offline

Užívateľ
Užívateľ
Pretypovanie tzv. Typecasting

Registrovaný: 27.12.08
Prihlásený: 13.12.22
Príspevky: 1874
Témy: 96
Bydlisko: Bratislava,...
Príspevok NapísalOffline : 26.07.2012 15:59

Každá funkcia má svoj návratový typ, hodnotu tohto typu potom vracia. Napr.
Kód:
int scitaj(int a, int b);
vracia premennú typu int.

Formát a typ sú hlavne v jazyku C dve rozdielne veci. To, že je premenná typu char totižto neznamená, že v nej nutne musí byť znak, môže v nej byť aj ľubovoľné číslo od -128 do 127. Potom túto premennú môžeš pri výpise formátovať ako znak (%c) alebo ako číslo (%d). (Preto sa aj pretypovanie volá pretypovanie a nie preformátovanie).

Kód:
(char*) int i;
je neplatný zápis, kľúčové slovo int tam nemá čo robiť.

A chápeš to zle. Premennú, hodnotu, ani nič nemeníš na smerník. Existuje dátový typ smerník, ktorý slúži na uloženie pamäťovej adresy. Tento dátový typ ďalej máva určené aký typ premennej by sa mal nachádzať na pamäťovej adrese na ktorú ukazuje. Pamäťový typ smerník na char má zápis
Kód:
char* c
V premennej c je uložená pamäťová adresa. Pamäťová adresa je číslo, v 32-bitových programoch 32-bitové, v 64-bitových programoch 64-bitové (Poväčšine). Aj keď urobíš smerník napr. na float štýlom
Kód:
float* f
f bude dátový typ smerník, čiže celé číslo, pamäťová adresa. Ak chceš vypísať adresu, na ktorú f ukazuje, použiješ výpis
Kód:
printf("%x",f);
Používam %x, pretože adresy sa väčšinou uvádzajú v 16-kovej sústave. Okrem tohoto existuje aj referenčný a dereferenčný operátor. Dereferenčný operátor je zhodou okolností opäť hviezdička a toto ťa mýli. Dereferenčný operátor pred názvom pointra vráti hodnotu, na ktorú pointer ukazuje. Referenčný operátor (&) pred názvom premennej vráti adresu, na ktorej sa premenná nachádza.

Kód:
char a = 'A';
char* b = &a;
V tomto, ani podobných prípadoch nemeníš premennú a na smerník. a stále ostáva premennou typu char, v ktorej je uložené písmenko A. Premenná b je smerník na char, ktorý odkazuje na premennú A. S týmto smerníkom teraz môžeš pracovať ako so smerníkom. Zápis &a nemení a na smerník, ale vracia adresu premennej A. Zápis *b nemení b na smerník, b je smerník a týmto zápisom pristupuješ k premennej, na ktorú ukazueje, teda k premennej a. Po takomto zápise môžeš hocikde v kóde nahradiť a zápisom *b a efekt bude úplne rovnaký.

Kód:
int i = 1;
int *j = &i;
char *c = (char *) j;
V tomto prípade sa deje to, že do smerníku j som vložil adresu premennej i (druhý riadok). V treťom riadku pretypovávam typ smerník na int na typ smerník na char.







_________________
~Listen to your brain, not your heart~
NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot)
NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI)
Offline

Užívateľ
Užívateľ
Pretypovanie tzv. Typecasting

Registrovaný: 06.06.12
Prihlásený: 24.06.15
Príspevky: 64
Témy: 19
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 26.07.2012 20:46

asi som tomu pochopil :D diki.


Odpovedať na tému [ Príspevkov: 13 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. pretypovanie

v Assembler, C, C++, Pascal, Java

1

755

27.06.2009 8:47

neutronmind Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pretypovanie (prevod typu)

v Technológia .NET

5

2136

07.12.2008 21:41

vyhno Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vytvorenie tzv Easyklik

v Ostatné programy

15

641

01.02.2016 8:42

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Internetový tzv.Obchod !!!

v Obchody, reklamácie a právo

5

704

31.08.2010 10:40

Mego Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C++ - Pretypovanie v Qt

v Assembler, C, C++, Pascal, Java

12

659

11.10.2011 22:36

Milsa Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pretypovanie pointeru na void

v Assembler, C, C++, Pascal, Java

1

631

03.10.2009 18:07

plna.hlava Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PCI ECP Paraller Port tzv. LPT

v Ostatné

1

497

15.09.2009 22:26

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Pretypovanie z 'Int' do 'double' C++

v Assembler, C, C++, Pascal, Java

1

299

13.01.2021 17:17

Jur_3 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C++ a Dynamické pretypovanie funkcie z DLLky...

v Assembler, C, C++, Pascal, Java

4

759

07.08.2009 22:15

marian_sk Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. win 8.1 neustale padanie tzv BSOD

v Operačné systémy Microsoft

0

378

31.10.2013 9:25

Palec Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako najsť nejakú tzv. plošticu či niečo čo odposlúcha.

v Ostatné

1

2380

28.01.2012 22:06

MTK Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. tzv "tlmic na zdroj"

v Modifikácie, návody a projekty

6

1709

21.02.2009 12:40

tommy1104 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra