סתם שאלה למתחילים

the1andtheonly

New member
אוקי אבל אני מתכנת בן 3 יום...

תן לי זמן להתרגל לשפה הזאת... ד"א במקום להגיד aa/bb אני לא יכול להגיד pa\pb?
 

the1andtheonly

New member
אוקי אבל אני מתכנת בן 3 יום...

תן לי זמן להתרגל לשפה הזאת... ד"א במקום להגיד aa/bb אני לא יכול להגיד pa\pb?
 

the1andtheonly

New member
כמה שאני מנסה אני פשוט לא מצליח

אני מבין שאם אני לא יעשה מצביע אז זה לא יתפוס אחרי הפונקציה... אבל למה? מה יש בפונקציה שחוסם את הנתון אחרי הביצוע?... אני מצטער אבל זה פשוט לא נתפס לי...
 

HaRmosh

New member
קבל הסבר

ב-C, כשפרמטרים מועברים לפונקציה, אוטומטית הדבר נעשה ע"י עותק. לא משנה מה תעביר - הכל נעשה By Value, כלומר ע"י יצירת עותק זמני של המשתנה שחי בתחום הפונקציה בלבד (פרמטר פורמלי, אם תרצה - בשפה מקצועית). אני אומנם לא רוצה לסבך אותך, אבל גם כשאתה מעביר מצביע הפונקציה לא מקבלת את המצביע ששלחת, אלא עותק שלו. מה שחשוב הוא שגם המצביע וגם העותק מחזיקים אותה כתובת, ולכן השינוי שתבצע על המקום המוצבע יתפוס גם מחוץ לפונקציה, ולכן הקוד שנתתי לך קודם עובד.
 

HaRmosh

New member
לא הבנתי את השאלה.

הפעולה i = j שמה את ערך j ב-i, כלומר דורסת את ערכו הקודם של i ושמה במקומו את j.
 

the1andtheonly

New member
אז בקיצור

void swap היא פונקציה שתוכה המשתנים שמניים בלי המצביעים הפעולות לא יפעלו אחר כך?
 

HaRmosh

New member
כן. ה"דוגמה הרעה" עושה

הכל בצורה זמנית, ללא מצביעים
 

the1andtheonly

New member
תודה רבה רבה רק עוד משהו

ניסתי שמתוך void יעלה המצביע i. למה זה לא אפשרי? ולמה בכלל מתוך הvoid אני לך יכול לעשות c out? #include <iostream> using namespace std; int main() { int a = 5, b = 7; int *aa = &a, *bb = &b; swap(aa, bb); return 0; } void swap(int* i, int* j) { int temp = *i; *i = *j; *j = temp; cout << endl; cout << "test"; cout << endl; cout << i; }
 

HaRmosh

New member
שני דברים -

אחד, עשה טובה - תיישר את הקוד (עם "תחילת קוד" ו-"סיום קוד"), שיהיה יותר נוח לעזור לך. שתיים, אתה לומד C לא ? cout הוא אובייקט של ++c, ככה שכרגע עדיף לך לא להשתמש בו - תישאר עם c רגיל, בינתיים.
 

the1andtheonly

New member
אם אפשר תמליץ לי על ספר

ברגע זה אני עם ערגת לימוד c++ ונודע לי שהוא גרוע http://www.developers.org.il/Books/books-comments-24.asp האם תוכל להמליץ לי על ספר טוב למתחילים ואם אתד יודע מיקום כדי לקנות אותו! תודה מראש!
 

the1andtheonly

New member
מקפיץ

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

גיאל

New member
שימוש של מצביעים

הי קיימים מספר רב של שימוש בצביעים: אחד מהם הוא אכן העברת פרמטרים לפונקציה. מאחר וניתן להעביר רק ערך לפונקציה (ב-C לפחות) לא ניתן לשנות ערך של משתנה דרך פונקציה. שימוש נוסף ונפוץ הוא בבניית מבני נתונים. נניח כי אתה רוצה לשמור נתונים על בני משפחתך. מאחר ומספר חברי המשפחה משתנה, לא תוכל לעשות זאת באמצעות מספר קבוע של משתנים, (או גודל קבוע של מערך). לכן קיים איזור בזיכרון הנקרא זכרון דינאמי, המאפשר לך "לבקש" זיכרון נוסף תוך כדי ריצת התוכנית (פקודת MALLOC ודומיה). הדרך היחידה שתוכל לקבל את שטח הזיכרון הנוסף הוא דרך מצביע לאיזור זה. אני מקווה שההסבר היה ברור. בהצלחה.
 
למעלה