» Poradna » Programy

Co znamena v jazyku C tento vyraz ?

 |   | 

Co znamena v jazyku C (C++) vyraz:
p -> iw += 256-143;

Ako sa to prelozi?

Mohlo by vás také zajímat

Odpovědi na otázku

 |   | 

Může to znamenat různé věci. Záleží na navržení rozhraní daného objektu.

Mohu se mýlit, ale nejčastěji to čteme následovně:

"Nastav u objektu, na který ukazuje ukazatel p, jeho vlastnost (proměnnou) iw na hodnotu o 113 větší než aktuální".

Jednodušší příklad:

int promenna = 20;
promenna += 256-143;
// promenna dále má hodnotu 133
...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Jednoduchy priklad som pochopil...
K tomu zlozitejsiemu by som mal este otazku...
Da sa to pochopit aj tak, ze objekt na ktory ukazuje ukazatel p je napr. skupina hodnot ktore sa daju nastavovat a jedna z nich je promenna iw ktora sa nastavi na 256-143?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Ukazatel může ukazovat na struktury nebo objekty (rozdíl je jen v defaultním public/private modifikátoru). V příkladě to bude nějak takto:

class mojetrida
{
public int iw;
// další datové typy a metody
}


void main()
{
mojetrida ^p = new mojetrida();
p->iw = iw + 256 - 143;
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

V podstatě ano.
Ale na tuto otázku se nedá odpovědět snadno.
To co ukazuješ už představuje práci s objekty a ukazatelem.
Obě témata jsou mimořádně rozsáhlá a společně pro začátečníky složitá.

Mimo to, příklad, který ukazuje kolega je velmi nevhodný.

1)
mojetrida ^p = new mojetrida(); //Je chybné.
U ukazatelů se používá *

Tedy příklad má vypadat takto:
mojetrida *p = new mojetrida();

2)
Objekt :

class mojetrida
{
public int iw;
// další datové typy a metody
}

Proměnná iw neobsahuje žádnou výchozí hodnotu. Nelze k ní tedy nic přičítat.

3)
Zápis
p->iw = iw + 256 - 143;

Je velice smutný, protože:
a) Není uvedeno na pravé straně, co znamená iw.
Pravděpodobně to mělo být zapsáno následně:
p->iw = p->iw + 256 - 143;
a nebo
p->iw += 256 - 143;

V předchozí části, v lepším případě na jeho neexistenci upozorní překladač.
V nejhorším případě může existovat nějaký jiná lokální proměnná nazvaná iw.
Taková chyba není ani syntaktická, ale pouze logická.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

To mám z toho, že to píšu narychlo a nekontroluju to po sobě .

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

1) "U ukazatelů se používá *"

O referenciach sme nepoculi...

2)
"Objekt :

class mojetrida
{
public int iw;
// další datové typy a metody
}

Proměnná iw neobsahuje žádnou výchozí hodnotu. Nelze k ní tedy nic přičítat."

OMYL typicky pre zhyckanych programatorov, ktorym virtual machine aj utiera rit na hajzli a ked zabudnu odtrhnut kus papiera, tak im vyskoci Exception cez cele hajzlove dvere... Houbli, pripocitat mozes kludne hocico k tomu, co tam bolo pred pridelenim pamati - maximalne ti bude prekladac nadavat, ale warningy aj tak nikoho nezaujimaju...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Mozna se ti k tomu neco podari pricist, ale jaky to bude mit smysl? Porad tam bude hodnota, ktera je k nicemu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Pane jo.
Ty máš ještě větší problém se sebe ovládáním, než já.
Tebe bych teda potkat někde v lese o samotě nechtěl.
Ale popořádku.

1) Reference
Reference je konstantní ukazatel.
U reference se zapisuje & nikoliv ^ (to se používá tuším v Pascale)

2) Proměnná iw neobsahuje žádnou výchozí hodnotu
Obsahuje takovou hodnotu, která se náhodou nachází na dané adrese v době běhu programu.
Pokud nechce mít velice nekvalitní generátor náhodných čísel ve svém programu,
nemá to smysl. Navíc nyní je to tak špatně zapsáno, že je to i syntakticky špatně.

Mimo to jsem si to zkoušel pod Microsofťáckým překladačem a ten automaticky tyto deklarované proměnné inicializuje nulou (respektive na jejich adresu uloží 0).

O tom jestli je to dobře a jak na toto reaguje nebo nereaguje ten či onen kompilátorse určitě nemíním hádat s člověkem jako ty.

3) "ale warningy aj tak nikoho nezaujimaju"
Bavit se o programování tady na Živě můžou snad jenom úplní začátečníci.
Takže přeji pěkný den a nashledanou.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

V jazyku C to znamena:

(*p).iw = (*p).iw + 113;

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Diky chalani, mam trochu predstavu ako to asi funguje...
boli casy kedy som robil v ASM, teraz uz je vsetko vetsinou v Cecku...

mam na vas este jednu otazku..
ako by sa dalo chapat tohle?

pAd->stats.tx_errors = pAd->Counters.TxErrors;

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 


Objekt na který ukazuje ukazatel (=smernik) pAd v sobě obsahuje (agreguje) další objekty nazvané stats a Counters .
Takže vlastně se jedná jen o kopii těchto hodnot v rámci jednoho objektu..... snad.

Abych byl korektní, jedná se pravděpodobně jen o změnu reference (může, ale nemusí).
Takže proměnná (?) objektu stats.tx_errors bude ukazovat na obsah proměnné Counters.TxErrors .

Ale takové věci se tady neptej. Jak vidíš, nemuselo by to dopadnout úplně dobře.
To už raději trefit:

">forum.builder.cz ...

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: West


Určitě si přečtěte

Nešťastný vývojář ukazuje, proč není dobré být závislý na Googlu
Lukáš Václavík
InternetGoogle
Elon Musk podpořil Signal jako náhradu WhatsAppu. Aplikaci okamžitě zavalili uživatelé
Markéta Mikešová
WhatsAppElon MuskFacebook
Finanční správa tento měsíc spustí Moje Daně. Přiznání má být hračka
Lukáš Václavík
eIdentitaČeskoeGovernment
Platby kartou se můžou rozšířit úplně všude. Jako terminál poslouží mobil
Lukáš Václavík
BankaPlacení mobilemNFC
Windows 10 čekají velké věci. Spekuluje se také o podpoře aplikací pro Android
Lukáš Václavík
Windows 10AndroidSoftwareMicrosoft
Micro:bit V2: Tuto destičku plnou čipů dokáže naprogramovat i vaše babička

Micro:bit V2: Tuto destičku plnou čipů dokáže naprogramovat i vaše babička

** Chcete se teď hned naučit programovat čipy? ** Nechcete nic instalovat a číst zdlouhavé manuály? ** Naprogramujeme si Micro:bit, který zahraje Tichou noc

Jakub Čížek | 35

Jakub Čížek
Pojďme programovat elektronikuProgramování pro děti
Superinteligenci nedokážeme ovládat a nejspíše se nedozvíme, že už tam někde je

Superinteligenci nedokážeme ovládat a nejspíše se nedozvíme, že už tam někde je

** Firmy i organizace včetně EU připravují etické kodexy pro A.I. ** Vědci z Madridu zkoumali, jestli je budeme moci aplikovat na A.I. 2.0 ** A je tu háček, superinteligence pro nás totiž bude neuchopitelná

Jakub Čížek | 83

Jakub Čížek
Umělá inteligence
Týden Živě: On fakt dnes ještě někdo stahuje filmy z Ulož.to?

Týden Živě: On fakt dnes ještě někdo stahuje filmy z Ulož.to?

** Kauza Ulož.to a proč my dva už (moc) newarezíme ** Windows 10X existují, ale nabízí se otázka proč ** Nissan ukázal vizi kanceláře v podobě karavanu

Jakub Čížek, Vladislav Kluska | 152

Jakub ČížekVladislav Kluska
Týden ŽivěVideo