הרצאה קריטית
Pointers
השאלות הפתוחות
•
•
•
•
•
•
מה זה ה & -שמופיע ב scanf
מדוע כשמעבירים מחרוזת ל scanfאין צורך ב &
האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת
התכנית?
כיצד ניתן לשנות את ערכי הפרמטרים בפונקציה?
למה יש הבדל בין משתנים פשוטים למערכים?
האם ניתן להחזיר יותר מפרמטר אחד בפונקציה?
What is the matrix?
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];
}
Addresses
a: 2012
ch: 1052
arr: 3020
Memory
0
1052
22
25
2
2012
3055
17
25
3020
3024
3028
2
0
50
0
50
0
3032
הגדרות פוינטרים
• : &aהכתובת של ( aכתוב בטבלת הכתובות)
• ל * יש שני תפקידים:
– בזמן הגדרת משתנה int *p :משמעו שהטיפוס של pהוא
מצביע ל ( intויכיל כתובת)
– בזמן ביצוע פעולה *p :משמעו :תוכן התא שכתובתו רשומה ב p
void main() {
int a,b,*pa,*pb;
a = 15; b = 20;
pa = &a;
b = *pa;
*pa = 0;
pb = &b;
pa=pb;
*pa=5;
}
Addresses
a: 5556
b: 524
pa: 3028
pb: 6080
Memory
0
524
359
15
20
5
3028
5556
524
2
5556
7663
15
0
6080
8797
524
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;
}
Addresses
a: 5572
p: 528
q: 3028
i: 6080
Memory
0
528
5572
17
3028
5576
2
5572
50
35
59
9
13
7
13
9
3
7663
6080
10
1
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);
}
לא עבר
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);
}
עבר
החזרת יותר מפרמטר אחד
#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);
}
swap שימוש ב
void minmax(int x, int y, int * min, int * max){
*min=x;
*max=y;
if (x>y) swap (min, max);
}
קצת רקורסיה
#include <stdio.h>
int *binSearch (int value, int *from, int *to){
int *middle = from+(to-from)/2;
if (*middle==value)
return middle;
else if (from == to)
return NULL;
else if (*middle < value)
return binSearch (value, middle+1, to);
else
return binSearch (value, from, middle-1);
}
שימוש
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);
}
פלט/קלט
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));
}
הקצאת זיכרון דינאמית
#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);
}
© Copyright 2026 Paperzz