דילוג לתוכן המרכזי
מודול 5 · שיעור 2 מתוך 212/18 בקורס~15 min
שיעורי מודול (2/2)

מצביעים

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


1. מהו זיכרון וכתובת?

כל משתנה שאתה מצהיר בתוכנית שלך מאוחסן בתא של זיכרון ה-RAM. לכל תא יש כתובת זיכרון ייחודית (בדרך כלל מתבטאת בפורמט הקסדצימלי, למשל, 0x7ffee3bf87ac).

C++ מאפשר לנו לקבל את כתובת הזיכרון של כל משתנה באמצעות האופרטור address-of &:

C++
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)

2. הגדרה של מצביע

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

התחביר מחייב שימוש בכוכבית * אחרי סוג הנתונים:

C++
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x

3. מפעיל ההפניה (*)

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

C++
int x = 42;
int* ptr = &x;

std::cout << *ptr; // Prints 42 (the value ptr points to)

*ptr = 100; // Modifies the value of x through the pointer
std::cout << x;    // Now prints 100!

4. נקודות אפס: nullptr

יש לאתחל מצביע שאינו מצביע על כתובת חוקית כלשהי עם מילת המפתח nullptr (מוצגת ב-C++11):

C++
int* ptr = nullptr; // Safe null pointer

נסה זאת בעצמך

פעילות גופנית#cpp.m5.l2.e1
ניסיונות: 0טוען...

ב-main, יש ערך של משתנה שלם המאוחל ל-42. הכריז על מצביע למספר שלם ptr שמצביע על כתובת הערך. השתמש בהתייחסות של ptr כדי להגדיר את ערך הערך ל-100, ולבסוף הדפס ערך באמצעות std::cout.

טוען עורך...
הצג רמז

הכריז על המצביע עם `int* ptr = &value;`, שנה את הערך על ידי הסרת '*ptr = 100;`, והדפיס `std::cout << value;`.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#cpp.m5.l2.e2
ניסיונות: 0טוען...

הגדר פונקציה doubleValue שמקבלת מצביע למספר שלם (int* ptr) ומכפילה את הערך שאליו הוא מצביע ב-2 (אם המצביע אינו null). ב-main, קרא doubleValue העברת הכתובת של המשתנה num והדפיס אותו.

טוען עורך...
הצג רמז

הפונקציה חייבת לקבל 'int* ptr'. בפנים, השתמש ב-`*ptr = (_ptr) _ 2`. ב-main call זה עם `doubleValue(&num);`.

הפתרון זמין לאחר 3 ניסיונות

Quiz#cpp.m5.l2.q1
מוכן

בהינתן הקוד שסופק, איזה ביטוי מאפשר לך לשנות ישירות את הערך של a, להגדיר אותו ל-10?

C++
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?
אפשרויות תשובה