Pointer v C

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Drevorubec
Level 1
Level 1
Příspěvky: 53
Registrován: listopad 12
Bydliště: Les
Pohlaví: Muž
Stav:
Offline

Pointer v C

Příspěvekod Drevorubec » 10 led 2013 17:42

Dobrý den! Potřeboval bych se zeptat na jednu věc. Mám totiž vědět, jaké budou proměnné na konci provedení programu. A ten program obsahuje něco, co je strašlivě těžké :D Zde je:

Kód: Vybrat vše

int main(void)
{ int i, j, *p, *q;
p = &j          //do pointeroveho p se da adresa j
q = &i          //do q se da adresa i
i = 4           //do i se da ctverka
j = 22          //do j se da 22
*q = *q+26      //do i se da 30
*p = i+7        //do j se da 37
q = p           //nu, a co se stane tady????
*q = *p+j


Vůbec nevím, co udělá q = p. A tak nemohu pokračovat dál. Je to strašně těžké. Řekli byste, prosím, co ten řádek programu udělá? Děkuji velmi.
Naposledy upravil(a) Drevorubec dne 10 led 2013 18:07, celkem upraveno 1 x.

Reklama
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Pointer v C#

Příspěvekod CZechBoY » 10 led 2013 18:03

řekl bych, že do i se vloží j

tohle není C#, ale C když už...
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Drevorubec
Level 1
Level 1
Příspěvky: 53
Registrován: listopad 12
Bydliště: Les
Pohlaví: Muž
Stav:
Offline

Re: Pointer v C

Příspěvekod Drevorubec » 10 led 2013 18:16

Děkuji za odpověď! Je to C. Takže v tom pípadě v i bude 37? A po posledním řádku bude *q 74.
Ve výsledku je, že na konci tohoto programu má být i=30, j=74, *p=74 a *q=74 taky. A já tedy vůbec nevím, proč i *p má být 74, když je tam naposledy 30+7 (to je 37), a za předpokladu, že se do i dá j by nemohlo i nikdy zůstat 30, ale rovněž 37. Tím pádem je to špatně ve výsledku? :D

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Pointer v C

Příspěvekod CZechBoY » 10 led 2013 18:20

q=p takže cokoliv vložíš do p je v q a naopak
si to zkus spustit a uvidíš..
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pointer v C

Příspěvekod faraon » 10 led 2013 18:54

Pointer se česky nazývá ukazatel, a je to speciální druh proměnné, která ukazuje nějaké místo v paměti. Prostě obsahuje přímo adresu v RAM. Můžeš pracovat s obsahem na té adrese, ale také můžeš pracovat s adresami samotnými! Takže bych to trochu rozvedl:

Kód: Vybrat vše

int main(void)
{ int i, j, *p, *q;
p = &j;          //do pointeroveho p se da adresa j
q = &i;          //do q se da adresa i
i = 4;           //do i se da ctverka
j = 22;          //do j se da 22
*q = *q+26;      /* k číslu na adrese v q se přičte 26 */
*p = i+7;        /* k číslu na adrese v p se přičte 7 */
q = p;           /* do q se okopíruje adresa z p, takže teď oba ukazatele ukazují na proměnnou j */
*q = *p+j;       /* k číslu na adrese v p se přičte hodnota z j, a uloží se na adresu v q, takže se proměnná j zdvojnásobí */

A pokud chceš mít průběžně přehled co tvůj program vyvádí, vlož si za každý příkaz kontrolní výpis, třeba takhle:
printf("%d\t%d\t%d\t%d\n",i,j,*p,*q);
Má to samozřejmě smysl až po přiřazení do i a j, předtím ti to bude psát hausnumera, a před definováním obou ukazatelů ti program dokonce spadne kvůli přístupu do cizí paměti!
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


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 5 hostů