1 / 12

Viidad

Viidad. Mis on viit?. Viit on muutuja, nagu kõik teisedki Viitmuutujasse saame salvestada mälupesa aadressi Viitmuutuja viitab mingile teisele objektile mälus Viitmuutujale on omane * muutuja nime ees Viitmuutuja tüüp peab kattuma viidatava tüübiga, st:

magda
Download Presentation

Viidad

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Viidad

  2. Mis on viit? • Viit on muutuja, nagu kõik teisedki • Viitmuutujasse saame salvestada mälupesa aadressi • Viitmuutuja viitab mingile teisele objektile mälus • Viitmuutujale on omane * muutuja nime ees • Viitmuutuja tüüp peab kattuma viidatava tüübiga, st: • Char viit peab viitama char muutujale • Int viit peab viitama int muutujale • jne

  3. Viitamisega seotud operatsioonid • int *p // viida deklareerimine • &muutuja // muutujalt aadressi pärimine • *p // viidatava väärtuse poole pöördumine • P = &muutuja // viidale muutuja aadressi omistamine • *p = 55 // viidatavale mälupesale andmete kirjutamine • printf("%p", p) // viidal salvestatud aadressi trükkimine • printf("%d", *p) // viidataval aadressil olevate andmete trükkimine

  4. Viitadest visuaalselt #include <stdio.h> intmain(void){ intnum=25, *p; p=&num; return 0; } *p0199FF8A num 25

  5. Näide 1 #include <stdio.h> intmain(void) { double pi=3.14, *p; p=&pi; printf("Pointerisse on salvestatudaadress\t %p\n", p); printf("pi muutujaasubaadressil\t\t %p\n", &pi); printf("Poordudesviidakaudumuutujassesaame\t %lg", *p); return 0; }

  6. Viidad ja funktsioonid • Funktsioonidega andmevahetus seniste vahenditega omab limitatsioone • Funktsioone välja kutsudes saame anda kaasa mäluaadresse (viitasid) • Saates funktsiooni mäluaadressi, võimaldame funktsioonil teha toiminguid mäluga, mis talle ei kuulu. Meenutame, et igal funktsioonil on oma mälu, mida teised funktsioonid ei näe. • NB! Andes funktsiooni kaasa viida, avaneb võimalus muuta originaalse muutuja väärtust(enam ei saadeta funktsiooni väärtuse koopiat!)

  7. Ülesanne 1 • Lae alla http://blue.pri.ee/tty -> Prog2 -> Koodinaited -> swap.c • Loo 2 arvu vahetamiseks funktsiooni prototüüp • Pea meeles, et määrata tuleb nii tagastatav tüüp, kui ka parameetrid! • Kirjuta vastava funktsiooni sisu • Kirjuta koodi funktsiooni väljakutse • Trüki välja muutujate aadressid nii main() funktsioonis, kui ka loodud alamfunktsioonis! Võrdle neid!

  8. Viidad ja massiivid • Massiivides on võimalik ringi käia viitasid kasutades. • Massiivis liikumiseks tuleb rakendada viida-aritmeetikat • NB! Tehete järjekord (sulgude kasutamine) • p = &massiiv[0] // massiivi esimese elemendi aadressi andmine viidale • p = massiiv // sama nagu eelmine, erinev kirjapilt (soovitatav) • *(p + i) //massiivis i-nda elemendi väärtuse juurde pöördumine • p++ // pointeri viimine järgmisele massiivi elemendile

  9. Viidad ja massiivid visuaalselt *p48F9AC91 intarray[]={5,3,7,3,5}; int*p; p =array; array[0]5 array[1]3 array[2]7 array[3]3 array[4]5 *(p + 0) *(p + 1) *(p + 2) *(p + 4) *(p + 3)

  10. Näide 2 #include <stdio.h> intmain(void) { intarray[] = {5, 3, 7, 3, 5}, *p, i; p=array; for(i=0;i<5;i++) { printf("%p, %d\n", (p+i), *(p+i)); } return 0; }

  11. Harjutus 2 • Aluseks võta näites 2 kasutatud koodijupp • Täienda koodi sedasi, et arvud loetakse sisse klaviatuurilt ja seejärel tehtaks väljatrükk sisestatud arvudest. • Leida suurim ja vähim element koos tema aadressiga • Nii arvude väljatrüki, kui ka suurima ja vähima leidmise puhul näita ära arvude aadress mälus • Kõik pöördumised tuleb teha viitasid kasutades!

  12. Kodus • Katseta viitade kasutamist erinevate koodijuppide peal. • Viidad on kasutusel meil kogu semestri vältel! • Lae alla ja tutvu põhjalikumalt pointerite näidekoodiga:http://blue.pri.ee/tty -> Prog2 -> Koodinaited -> pointerid.c • Ürita aru saada kust tulevad aadressid, kuhu pointerid viitavad ja mis nende taga peitub!

More Related