דף הבית שיעורים תוספות לא מונחות עצמים
משתנה הפניה - המשך
 
משתנה הפניה - המשך
 
כעת נשווה בין שלושת הדרכים להעברת int לפונקציה:

  קריאה לפונקציה הפונקציה
העברת int Sample(b); void Sample(int a)
{ a = 5; }
העברת מצביע ל-int Sample(&b); void Sample(int *a)
{ *a = 5; }
העברת הפניה ל-int Sample(b); void Sample(int &a)
{ a = 5; }

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

int a;
int &b = a;
b = 5;
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

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

int &Get(int *arr, int size, int &content)
{
 int i;
 for (i=0; i<size; i++)
 {
  if (arr[i] == content)
   return arr[i];
 }
 return content;
}

void main()
{
 int arr[] = {1, 4, 2, 5, 3};
 int size = sizeof(arr);
 int find = 5;
 Get(arr, size, find) = 13;
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

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