1 / 15

Pointers

Pointers. הרצאה קריטית. השאלות הפתוחות. מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת התכנית? כיצד ניתן לשנות את ערכי הפרמטרים בפונקציה? למה יש הבדל בין משתנים פשוטים למערכים?

Download Presentation

Pointers

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. Pointers הרצאה קריטית

  2. השאלות הפתוחות • מה זה ה- & שמופיע ב scanf • מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & • האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת התכנית? • כיצד ניתן לשנות את ערכי הפרמטרים בפונקציה? • למה יש הבדל בין משתנים פשוטים למערכים? • האם ניתן להחזיר יותר מפרמטר אחד בפונקציה?

  3. What is the matrix?

  4. Addresses Memory a: 2012 0 ch: 1052 arr: 3020 1052 25 22 2 void main() { int a; char ch; int arr[4]={2}; a=17; ch=25; a=ch; ch=arr[0]; arr[2]=a*ch; arr[3]=arr[2]; } 2012 17 25 3055 3020 2 3024 0 3028 0 50 3032 0 50

  5. הגדרות פוינטרים • &a : הכתובת של a (כתוב בטבלת הכתובות) • ל * יש שני תפקידים: • בזמן הגדרת משתנה: int *p משמעו שהטיפוס של p הוא מצביע ל int (ויכיל כתובת) • בזמן ביצוע פעולה: *p משמעו: תוכן התא שכתובתו רשומה ב p

  6. Addresses Memory a: 5556 0 b: 524 pa: 3028 524 5 359 15 20 void main() { int a,b,*pa,*pb; a = 15; b = 20; pa = &a; b = *pa; *pa = 0; pb = &b; pa=pb; *pa=5; } pb: 6080 3028 2 5556 524 5556 15 0 7663 6080 524 8797

  7. Addresses Memory a: 5572 0 p: 528 q: 3028 528 5572 17 void main() { int a[6],*p,*q,i; p = &a[0]; *p = 50; q = &a[1]; *(p+2) = 7; *q=9; *(q+3)=*(p+1); i=q-p; } i: 6080 3028 5576 2 5572 35 50 59 9 13 7 13 3 9 7663 6080 10 1

  8. לא עבר swap פונקצית #include <stdio.h> void swap(int x, int y){ int temp=x; x=y; y=temp; } void main(){ int a=5,b=7; printf("a: %d, b: %d\n",a,b); swap(a,b); printf("a: %d, b: %d\n",a,b); }

  9. עבר swap פונקצית #include <stdio.h> void swap(int *x, int *y){ int temp=*x; *x=*y; *y=temp; } void main(){ int a=5,b=7; printf("a: %d, b: %d\n",a,b); swap(&a,&b); printf("a: %d, b: %d\n",a,b); }

  10. החזרת יותר מפרמטר אחד #include <stdio.h> void minmax(int x, int y, int * min, int * max){ if (x<y){ *min=x; *max=y; } else{ *min=y; *max=x; } } void main(){ int a,b,min,max; printf("Enter a and b\n"); scanf("%d%d",&a,&b); minmax(a,b,&min,&max); printf("min: %d, max: %d\n",min,max); }

  11. swap שימוש ב void minmax(int x, int y, int * min, int * max){ *min=x; *max=y; if (x>y) swap (min, max); }

  12. קצת רקורסיה #include <stdio.h> int *binSearch (int value, int *from, int *to){ int *middle = from+(to-from)/2; if (*middle==value) return middle; elseif (from == to) return NULL; elseif (*middle < value) return binSearch (value, middle+1, to); else return binSearch (value, from, middle-1); }

  13. שימוש void main(){ int a[10]={5,7,15,19,28,35,56,88,155,156}; int * p, index; p=binSearch(19,&a[0],&a[9]); if (p==NULL) index=-1; else index=p-a; printf ("%d\n",index); }

  14. קלט/פלט void main(){ int a, b, *pa; char st[10]; pa=&a; scanf("%d%d%s", pa, &b, st); printf("%d %d %c\n",*pa, b, st[3]); printf("%d %d %c\n",a, *(&b), *(st+3)); }

  15. הקצאת זיכרון דינאמית #include <stdio.h> #include <stdlib.h> void main(){ int *arr, n, i; printf ("Enter size of array\n"); scanf("%d",&n); arr=malloc(n*sizeof(int)); if (arr==NULL){ printf ("Failed to allocate memory\n"); return; } for (i=0; i<n; i++){ scanf("%d",arr+i); } free(arr); }

More Related