(Pointers) םיעיבצמ - C/C++
ישאר דומע סינוקא ןד תאמ

.םיתב 2 ספות עיבצמ ןכלו DOS תביבסל ודוסימ בתכנ הז ךירדמ :הרעה
.עיבצמ ספות ותוא עובק םיתב רפסמ שי הלעפהה תוכרעמ לכל

.ןורכיזב רחא הנתשמ לש תבותכ םכותב ליכהל ודעונ רשא ,ןורכיזב םידחוימ םינתשמ םה םיעיבצמ
.(ולש סופיטה המ הנשמ אל) םיתב 2 לש עובק לדוג לעב אוה עיבצמ הנתשמ
!דבלב סופיט ותואמ הנתשמ לע עיבצהל לוכי עיבצמ

:םירוטרפוא

...לש ןורכיזב תבותכה - &
...י"ע תעבצומה תבותכה לש ךרעה - *
.ותרדגה תעב עיבצמ הנתשמ לע הדיעמ ,ןכ ומכ

:אמגודל
int *p;
!עיבצמ אוה הז הנתשמש ךכ לע תלמסמ ותרדגהב הנתשמ םש ינפל האבה תיבכוכ
.int גוסמ םינותנ לע קרו ךא עיבצהל לוכיה םיתב 2 לעב הנתשמ ןורכיזב תרצוי p עיבצמה תרדגה
.תיבכוכ םדקמב אלו ומשב קר שמתשנ ,והשלכ ךרע עיבצמל תתל הצרנשכ ,תינכותה ךשמהב
: (וילע עיבצי p-ש הצרנו a םשב int הנתשמ ןורכיזב רדגומש חיננ) אמגוד
p=&a;
!דבלב תבותכ אוהש ךרע לבקל לוכי עיבצמ הנתשמ
.ןורכיזב a הנתשמה לש תבותכה אוהש ךרע ליכמ p ,ונלש הרקמב

הרהבה
עיבצמ לחתאל דאמ בושח ןכל .ןורכיזב יארקא םוקמ לע עיבצמ אוהו לחתואמ וניא עיבצמה ,עיבצמה תרדגה םע
.עיבצמ אוה וילע תבותכל היינפ ינפל תבותכ םע

:אמגוד
int *p;
:אבה רבדה תא עצבנ םא היהי ןכוסמ ,ןכל .תבותכב לחתואמ וניאש p עיבצמ ונרדגה
*p=2;
.(תרחא תינכות י"ע שומישב אצמנש ןכתייו) רדגומ וניאש םוקמל ,2 ךרע םינתונ ונא

.וב שומישה ינפל עיבצמל תבותכ ךרע תתל אוה תושעל ןוכנה רבדה
:אמגוד
int a=2, *p=&a;
.a לש תבותכה םע תורישי לחתואמש ,p עיבצמו ,a ליגר הנתשמ ונרדגה
:p תועצמאב a-ל סחייתהל לכונ וישכע
*p=3;
.(p י"ע עבצומש ךרעה תא למסמ *p) .3 -ל a לש וכרע תא וניניש ,השעמל
:(החנה ןה ןורכיזב תובותכ) ךכ הארנ הז ןורכיזב


:תואמגוד

.( 2000 - ל"נה בצמב) ןורכיזב a הנתשמה לש תבותכה - &a
.( 3000- ל"נה בצמב) ןורכיזב p (עיבצמ) הנתשמה לש תבותכה - &p
.(*p=3 ןכלו a-ל עיבצמ p ,ל"נה בצמב) .p עיבצמ הילע תבותכב אצמנש ךרעה - *p
.יהשלכ תבותכ ןכותל סחייתהל לכונ אל ןכלו תבותכל עיבצמ אל אוה a !תועט - *a


םיכרעמל םיעיבצמ ןיב רשקה

.םיאתה תצובק לש ןושארה אתה לש ותבותכ תא ליכמ רשא עיבצמ םירידגמ השעמל ,ךרעמ םירידגמשכ
:אמגודל
char str[10];
.םהבש ןושארה אתה לע עיבצמ str עיבצמה רשא ,בשחמה ןורכיזב char גוסמ םיפיצר םיאת 10 הרידגמ וז הרדגה
.רחא סופיטמ הנתשמ לע עיבצהל לוכי וניאו char גוסמ אוה str עיבצמהש ,רוכזל שי

:(4000 תבותכב הליחתמ םירביאה תצובקש החנהב) ךכ הארנ הז ןורכיזב

הרהבה
עיבצמל םורגל לכונ אל ,ןכל .ליכמ אוה ותוא תבותכה תא תונשל ונתלוכיב ןיא .יטטס עיבצמ הרידגמ ךרעמ תרדגה
.ןורכיזב רחא םוקמל עיבצהל str

:לשמל .סקדיאבו עיבצמה םשב שמתשהל םילוכי ונא ,(תזורחמה וא) ךרעמה יאתמ דחא לא תשגל םיצור ונאשכ
str[2]='a';
הילא תעגהש תבותכב םישו (1 byte) char לדוגב םידעצ 2 דוע ךל םשמ ,str עיבצמ הילע תבותכל ךל" :ועמשמ
." 'a' תואה תא

:איה ךרעמב n-ה רביאל הינפל תיללכה החסונה
*(str + n * size_of_type) = ...;
.( 'וכו char =1, int=2 ) סופיטה לדוג אוה size_of_type

.* רוטרפואב שמתשהל ונילע ,וז תבותכל תונפל ידכו ,תבותכ אוה םיירגוסה ךותב אצמנש ךרעה
:ךכ תאז עצבל לכונ ,'a' תואל הב ישילשה רביאה תא תונשלו ל"נה תזורחמל תשגל ידכ ,לשמל

*(str + 2 * 1) = 'a';

str[2] = 'a';  // is another way

ךרעמל רחא עיבצמ םע השיג
.יטטס עיבצמ אוה ךרעמ םשש םושמ ךרעמל עיבצמה לש תבותכה ךרע תא תונשל לכונ אלש ונרמא
לע עיבצהל לכוי רשא (ימניד) רחא עיבצמ רידגהל ךרטצנ ,(עיבצמ י"ע) ךרעמב אתל הרישי השיג םשל
:ךכ תאז עצבל לכונ .ךרעמב רביא לכ
char *p=str;
,איה רבדה תועמשמ .ל"נה תזורחמה תליחת לש תבותכה םע לחתואמ רשא p םשב char -ל עיבצמ ונרדגה ןאכ
תאז עצבל לכונ ,'a' תואה תא ישילשה ותב םישל הצרנ םא ,אמגודל . p - "םש דוע" ונשי str תזורחמלש
:םיעיבצמה דחא םע השיג י"ע
str[2] = 'a';

p[2] = 'a';   // does the same
!ךרעמ ותואל איה םהינש םע השיגה ,תבותכ התואל םיעיבצמ םיעיבצמה ינשש הדבועה ללגב

p-ל תתל לכונ ךא (יטטס עיבצמ אוה str-ש םושמ) תזורחמב ישילשה אתה לש תבותכה תא str-ל תתל לכונ אל
:האבה הדוקפה י"ע ךרעמב ישילשה רביאה לע עיבצהל (עיבצמכ רדגומ רבכש)
p=str+2;
:הדוקפה י"ע 'a'-ל ישילשה רביאה תא תונשל לכונ וישכע
*p = 'a';


תוצירטמל םיעיבצמ ןיב רשקה

.ומצע ינפב ךרעמ אוה הצירטמב רביא לכ ,רמולכ .םיכרעמ לש ךרעמ איה ,עודיכ ,הצירטמ

:אמגוד
int mat[5][10];
.mat אוה םיכרעמה 5-ל יללכה םשה .םיאת 10 םנשי הזכ ךרעמ לכל רשא ןורכיזב םיפיצר םיכרעמ 5 ונרדגה ,וז הרדגהב
.הצירטמב [0,0]-ה רביאל עיבצמה ,עיבצמ לש םש אוה mat
.(הדומעו הרוש) םיסקדניא 2 י"ע הצירטמב את לכל סחייתהל לכונ
:אמגוד !םלש ךרעמל תוסחייתה איה דחא סקדניא תועצמאב הצירטמל תוסחייתה

mat[2];
.mat עיבצמה י"ע תעבצומה הצירטמב תישילשה (הרושה) ךרעמל תוסחייתה וז
.תישילשה הרושב ןושארה רביאה תבותכ אוה mat[2] רמולכ ,ומצע ינפב עיבצמ אוה ךרעמ לש םש ירהו
:ךכ םושרל לכונ

int *p = mat[2];
.הצירטמב תישילשה הרושה תליחת תבותכ םע לחתוא ,רדגוהש p עיבצמה
:ךכ ל"נה הדוקפל הלוקשה הדוקפה תא םושרל םילוכי ונייה

int *p = &mat[2][0];
.(תישילשה הרושה תליחת) הצירטמב (2,0) רביאה לש תבותכב לחתואמ p עיבצמה
:תועט איה האבה הדוקפה םושיר

int *p = mat[2][0];
.הצירטמב אצמנש ירפסמ ךרע לבקמ אוה הז הרקמבו תבותכ לבקל הפצמ p עיבצמהש םושמ


היצקנופל תבותכ לש הלבקו תחילש

ריזחהל הלוכי היצקנופש ,איה היעבה .היצקנופ תועצמאב תישארה תינכותהמ םינתשמ המכ לע לועפל הצרנ םימעפל
.םיעיבצמ תועצמאב היעבה לע רבגתהל לכונ .דבלב דחא ךרע רתויה לכל
הליגר ךרדב תאז תושעל ןויסנ לכ .םכרע תא ףילחהל וננוצרבו (y-ו x) תישארה תינכותב םינתשמ 2 םימייקש חיננ
לע םייונישה תא עצבתו ןורכיזב םיקתוע םהל חתפת םינתשמה ינש תא טולקתש היצקנופהש םושמ חילצי אל
.תישארה תינכותה ינתשמב רבד םוש הרק אל ונתניחבמו ןורכיזהמ ונופי םיקתעהה ,היצקנופה םויסב .םיקתעהה

void swap(int x, int y)
  {
    int temp=x;
    x=y;
    y=temp;
  }

void main()
  {
    int x=4,y=3;
    swap(x,y);
    printf("x=%d y=%d",x,y);
  }
    
:ךכ הארנ רבדה ןורכיזב



אלל תישארה תינכותב םינתשמה תא ריאשיש המ ,היצקנופב ורדגוהש םינתשמה ןורכיזהמ ונופי ,היצקנופה םויסב
.יוניש

:ךכ היעבה לע רבגתהל לכונ
.היצקנופב םמצע םינתשמה לע דובענו םהלש תבותכה תא חלשנ ,םינתשמה יכרע תא חולשל םוקמב
:ךכ היצקנופל ארקנ .swap אוה םיכרעה תפלחה תיצקנופ לש המשש חיננ

swap (&x, &y);
.(םמצע םינתשמה) תובותכה לע דובעת היצקנופהו םינתשמה תובותכ תא swap היצקנופל ונחלש

:ךכ תאז רידגנ ןכל .םיכרע אלו תובותכ לבקת איהש ךכ היצקנופה תא רידגהל ךרטצנ ,תובותכ ונחלש םא

void swap(int *px, int *py)
םינתשמל תובותכ יתש ונחלש ,רמולכ .סופיט ותואמ עיבצמ לע "שבלתהל" הכירצ ,היצקנופל תחלשנה תבותכ לכ
האיגש איה םיליגר םינתשמ י"ע תובותכ תלבק .int סופיטמ םיעיבצמ ינש י"ע ןתוא לבקל ךרטצנ int - סופיטמ
!תובותכ לבקל םילוכי אל םיליגר םינתשמש םושמ
.תישארה תינכותהמ םינתשמה לע שממ םידבוע ונחנאש םושמ (void) ךרע םוש ריזחהל הכירצ אל היצקנופה

:ךכ הארית היצקנופה
void swap(int *px, int *py)
  {
    int temp = *px;   
    *px = *py;      
    *py = temp;
  }

תבותכה תא לבקמ py עיבצמהו תישארה תינכותהמ x הנתשמה תבותכ תא לבקמ px עיבצמה ,ל"נה היצקנופב
הרישי תוסחייתה איה םיעיבצמה םה םהילע תבותכה לש ךרעל תוסחייתה לכ .תישארה תינכותהמ y הנתשמה לש
.תישארה תינכותמ y-ו x םינתשמל


היצקנופל ךרעמ לש הלבקו החילש

עיבצמ אוה ךרעמה םש) .ולש ןושארה רביאה לש תבותכ םע םיארוק םצעב ונא ,ךרעמ םע היצקנופל םיארוק ונאשכ
.(וב ןושארה אתל
.תינכותב arr םשב ךרעמ ונשיש חיננ
:דימת ךכ עצבתת ךרעמה םע היצקנופל האירק
func(arr);
:אמגוד .רחאה עיבצמה םע אורקל ,היצקנופל האירקבו arr ךרעמה לע רחא עיבצמ םע עיבצהל ונלכי

int arr[10], *p=arr;
func(p);

:םיכרד 2 ןנשי היצקנופה תרדגהל
:(ךרעמה דבלמ תרחא תבותכל עיבצהל לוכי וניאש יטטס עיבצמ) ךרעמ םש תלבק ,תחאה
void func(int arr[]);
.וכרע תא תונשל וניתורשפאב ןיאו ךרעמה תליחתל עיבצמה יטטס עיבצמ אוה arr ,וז הטישב

:וכרע תא תונשל לוכיה עיבצמ תלבק ,היינשה
void func(int *arr);
:וזכ הדוקפ םושרל לכונ רמולכ .עיבצמה עיבצי הילע תבותכה תא תונשל תלוכיה איה היינשה הטישב ןורתיה

arr++;
.(ןושארה אלו) ךרעמב ינשה רביאל עיבצי עיבצמה ,הזכ הרקמב


היצקנופל הצירטמ לש הלבקו החילש

.הלש ןושארה רביאה תבותכ םע היצקנופל םיארוק םצעב ונא ,הצירטמ לש םש םע היצקנופל םיארוק ונאשכ
.תינכותב mat םשב הצירטמ הנשיש חיננ
:דימת ךכ עצבתת הצירטמה םע היצקנופל האירק
func(mat);
לש ךרעמל עיבצמ אוה mat .ליגר עיבצמ אל אוה mat -ש ינפמ mat עיבצמ הילע תבותכה תא עיבצמל תתל ןתינ אל
.(םיליגר םינתשמ לש אלו) םיכרעמ
:תועט איה האבה הדוקפה ,רמולכ
int *p = mat;
לש תורושה תליחת תובותכ םע ולחתואיש ,(יונישל םינתינה - םיימניד) םיעיבצמ ךרעמ רידגהל לכונ ,ןכל
:ךכ תאז השענ .(mat הצירטמה
int mat[5][10], *p[5], i;

for (i=0; i<5; i++)
  p[i] = mat[i];

.המאתהב mat הצירטמב הרוש לביק p םיעיבצמה ךרעמב עיבצמ לכ
:לשמל .p םיעיבצמה ךרעמ תועצמאב הצירטמל סחייתהל רשפא ,וישכע
p[3][4] = 3;
mat[3][4] = 3;  //  both commands are the same

הרהבה
עיבצמ אוה p רמולכ) םיעיבצמ לש ךרעמ אוה p-ש םושמ p תועצמאב mat הצירטמב לפטתש היצקנופל אורקל לכונ אל
.(ויתורוש לכל םיעיבצמה לכ תא ליכמ אל אוהו) םיכרעמ לש ךרעמ תליחתל עיבצמ mat-ש דועב (םיעיבצמל

:םיכרד 2 ןנשי היצקנופה תרדגהל
:(תרחא תבותכל עיבצהל לוכי וניאש םיכרעמ לש ךרעמל יטטס עיבצמ) הצירטמ םש תלבק ,תחאה

void func(int mat[][10]);
.וכרע תא תונשל וניתורשפאב ןיאו םיכרעמ לש ךרעמ תליחתל עיבצמה יטטס עיבצמ אוה mat ,וז הטישב

:וכרע תא תונשל לוכיה עיבצמ תלבק ,היינשה
void func(int (*mat)[10]);
:םירקמ ינש ןיב דירפהל ידכ םה *mat תא םימחותה םיירגוסה

int *mat[10];
םיעיבצמ 10 לש ךרעמ רדגוה ןאכ mat[10]
int (*mat)[10];
רחא ךרעמל עיבצהלו םדקתהל לוכיה םירביא 10 לעב ךרעמל עיבצמ רדגוה ןאכ

:וזכ הדוקפ םושרל לכונ רמולכ .עיבצמה עיבצי הילע תבותכה תא תונשל תלוכיה איה היינשה הטישב ןורתיה

mat++;
.(הצירטמה לש היינשה הרושה) ינשה ךרעמל עיבצי mat עיבצמה ,הזכ הרקמב


םיעיבצמ לש ךרעמ

.(ליגר רביא אלו) ומצע ינפב עיבצמ אוה וב רביא לכ רשא ,רבד לכל ךרעמ אוה םיעיבצמ לש ךרעמ
הרוש לש תבותכב וב עיבצמ לכ לחתאל לכונ םיעיבצמ לש ךרעמ תועצמאבש וניאר ,הצירטמה לע אמגודב
.הצירטמב תרחא

:אבה ןפואב רידגנ םיעיבצמ לש ךרעמ
int *arr[5];
.int גוסמ הנתשמל עיבצמ אוה וב רביא לכ רשא ,םירביא 5 לעב ,arr םשב ךרעמ ונרדגה ןאכ
arr ,רמולכ .םיעיבצמ לש ךרעמל עיבצמ איה arr הלימה ןכל ,וב ןושארה רביאל עיבצמ אוה ךרעמ לש םשש ונרמא
.םיעיבצמה ךרעמב ןושארה עיבצמל עיבצמ אוה arr - !ליגר עיבצמ אל אוה

:אבה רבדה תא עצבל לכונ אל ,ךרעמה לש הנושארה תבותכה תא (p אמגודל) רחא עיבצמל תתל הצרנ םא

int *p=arr;
!םיעיבצמ לש ךרעמל עיבצמ אוה arr -ש דועב int הנתשמל עיבצמ אוה p-ש םושמ תאזו
:י"ע תאזו עיבצמל עיבצמ היהיש ,ךכ p תא רידגהל ךרטצנ ,ןכל

int **p=arr;
(?אל ,תצק לבלבמ) .arr םיעיבצמה ךרעמב ןושארה עיבצמה לע עיבצמ p עיבצמל-עיבצמה ,וישכע

:(החנה ןה םינתשמה תובותכ לכ) ןורכיזב הרקמל אמגוד
.המאתהב םהמ דחא לכ לע עיבצמ arr םיעיבצמה ךרעמ רשא a,b,c,d,e ןורכיזב םינתשמ 5 םנשיש חיננ

.1000 תבותכב אצמנ p עיבצמל עיבצמה -
.(םיתב 2 ספות וב עיבצמ לכ) 3000 תבותכב ליחתמ arr םיעיבצמה ךרעמ -
.3 וכרעו 4000 תבותכב אצמנ a הנתשמה -
.6 וכרעו 4200 תבותכב אצמנ b הנתשמה -
.9 וכרעו 4400 תבותכב אצמנ c הנתשמה -
.2 וכרעו 4500 תבותכב אצמנ d הנתשמה -
.5 וכרעו 5000 תבותכב אצמנ e הנתשמה -

:ךכ הארנ רבדה ,ןורכיזב

:תואמגוד



תוזורחמל םיעיבצמ ךרעמ

תחא הצירטמב תוזורחמ רפסמ גוציי לש היעב הנשי .תזורחמ איה הב הרוש לכ רשא הצירטמ אוה תוזורחמ לש ךרעמ
ךרטצנ ךא תוזורחמה ראשמ רתוי הברה לודג הכרואש הצירטמב תחא תזורחמ הנשיו ןכתיי .ןורכז זובזב איהו
.וז תזורחמ ךרואל הצירטמה דמימ תא עובקל
:אמגודל

רידגהל ךרטצנ ךכ םשל .הצירטמל ןלוכ תא סינכהל וננוצרבו "abcdefghi", "mn", "xy" תוזורחמ 3 ןנשיש חיננ
:ךכ הארתש 10x3 םיות תצירטמ

.שומישב םניא הצירטמה יאתמ תיצחמ טעמכ .ןיעל הארנ ןורכיזה זובזב

.תוזורחמל םיעיבצמ ךרעמ י"ע תאזו ,תרחא הרוצב שורדה םינותנה הנבמ תא ןגראל לכונ

: איה ךרדה
char *arr_ptr[3] = {"abcdefghi", "mn", "xy"};
:(דבלב החנה ןה תובותכה) האבה ןורכיזה תפמב ןנובתה

.1000 תבותכמ ליחתמ arr_ptr םיעיבצמה ךרעמ -
.4000 תבותכמ הליחתמ "abcdefghi" תזורחמה -
.3000 תבותכמ הליחתמ "mn" תזורחמה -
.5000 תבותכמ הליחתמ "xy" תזורחמה -

3 -ל םיעיבצמ 3 ליכמ םיעיבצמה ךרעמ .הזל רבעמ אלו תקקזנ איה ול ןורכיזה אצקומ תזורחמ לכל ,וז ךרדב
!והשלכ םש ןיא תוזורחמלש בל םישל שי .תוזורחמה תא םיליכמ רשא ןורכיזב םינוש תומוקמ
.arr_ptr םיעיבצמה ךרעמב םיאתמה עיבצמל היינפ י"ע קר ןכתיי תזורחמל תוסחייתה לכ

:ךכ הדוקפה תא םושרל ךרטצנ ,a ליגר הנתשמב ותוא םישלו "abcdefghi" תזורחמה ךרוא תא לבקל הצרנ םא :אמגודל
a = strlen(arr_ptr[0]);
היצקנופל םיחלוש ונחנא ותואו תזורחמה םשכ arr_ptr םיעיבצמה ךרעמב ןושארה עיבצמה לא םיסחייתמ ונחנא ןאכ
.הכרוא תא לבקל ידכב strlen()