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

Odpovědět
Drevorubec
Level 1
Level 1
Příspěvky: 53
Registrován: 05 lis 2012 23:35
Bydliště: Les

Pointer v C

Příspěvek od Drevorubec »

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.
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: Pointer v C#

Příspěvek od CZechBoY »

ř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: 05 lis 2012 23:35
Bydliště: Les

Re: Pointer v C

Příspěvek od Drevorubec »

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: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: Pointer v C

Příspěvek od CZechBoY »

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: 7408
Registrován: 23 pro 2010 09:23

Re: Pointer v C

Příspěvek od faraon »

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)
Odpovědět

Zpět na „Programování a tvorba webu“