ABA


"מזה אומר המצביע לרשימה-מה ההבדל בין המצביע לרשימה לרשימ"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #13878 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 13878
Grass-Boyy
חבר מתאריך 9.6.03
3603 הודעות
   08:48   28.01.07   
אל הפורום  
  מזה אומר המצביע לרשימה-מה ההבדל בין המצביע לרשימה לרשימ  
 
   ערכתי לאחרונה בתאריך 28.01.07 בשעה 09:02 בברכה, Grass-Boyy
 
ה


ההצהרה:


list_type *list


מה ההבדל בין list שהוגדר כמצביע לרשימה list

לבין ההצרה הרגילה של רשימה


list_type list


אני יודע שהמצביעים עובדים עם כתובות והם טובים אם רוצים לשנות ערך כלשהו מחוץ לפונקציה אבל בכל העבודה עם רשימה ומחסנית לא כ"כ הבנתי מה זה אומר מצביע למחסנית\מצביע לרשימה

נ.ב
עוגן_לרשימה(l1) לא יביא לי עוד את המיקום הראשון אלא את הכתובת הלפני התחלתית?
לכן צריך בנוסף אליו לעשות עוקב_לרשימה כדי להגיע לתא הראשון ולמיקום ברשימה?


תודה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  מתי אני אשתמש בstruct list** head? Grass-Boyy 28.01.07 09:18 1
  זה די פשוט E-do  30.01.07 00:01 2
     אוקי זה היה די ברור אחי, כנס: Grass-Boyy 30.01.07 14:46 3
         נכון. E-do  30.01.07 18:41 4
             אוקי אז מתי אני אדע מתי אני יצטרך להשתמש בפוינטר ומתי ל Grass-Boyy 30.01.07 21:18 6
         דוגמא MULI 30.01.07 19:16 5
             לא הבנתי - כנס: Grass-Boyy 30.01.07 21:29 7
  מצביע על מצביע מעתיק את הכתובת בלי לפגוע בכתובת ההתחלתית? Grass-Boyy 30.01.07 21:32 8

       
Grass-Boyy
חבר מתאריך 9.6.03
3603 הודעות
   09:18   28.01.07   
אל הפורום  
  1. מתי אני אשתמש בstruct list** head?  
בתגובה להודעה מספר 0
 
   מצביע למצביע


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
E-do 
חבר מתאריך 29.10.03
2160 הודעות
   00:01   30.01.07   
אל הפורום  
  2. זה די פשוט  
בתגובה להודעה מספר 0
 
   תדמיין לך שיש חנות, וקילומטר לפני יש שלט שמצביע לכיוון החנות.

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

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


-----------------
בברכה,
e-do


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Grass-Boyy
חבר מתאריך 9.6.03
3603 הודעות
   14:46   30.01.07   
אל הפורום  
  3. אוקי זה היה די ברור אחי, כנס:  
בתגובה להודעה מספר 2
 
   אז המצביע מכיל כתובת שבעצם ע"י המצביע אנ ניגש לתא

אז מה הכוונה מציע על מצביע (**) לא הבנתי בכלל למה הכוונה ומתי יש בזה שימוש?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
E-do 
חבר מתאריך 29.10.03
2160 הודעות
   18:41   30.01.07   
אל הפורום  
  4. נכון.  
בתגובה להודעה מספר 3
 
   ולגבי השאלה השניה שלך... מצטער אבל אני לא מכיר את האפשרות הזו.


-----------------
בברכה,
e-do


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Grass-Boyy
חבר מתאריך 9.6.03
3603 הודעות
   21:18   30.01.07   
אל הפורום  
  6. אוקי אז מתי אני אדע מתי אני יצטרך להשתמש בפוינטר ומתי ל  
בתגובה להודעה מספר 4
 
   אא?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MULI

   19:16   30.01.07   
אל הפורום  
  5. דוגמא  
בתגובה להודעה מספר 3
 
  

void f(int *ip)
{
static int dummy = 5;
ip = &dummy;
}

הקריאה נעשית ככה:

int *ip;
f(ip);

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

תשים לב שמה שבעצם עשינו זה שמסרנו לפונקציה f את הכתובת שip החיצוני מכיל (הוא קיבל כתובת אקראית כלשהי כי לא אתחלנו אותו)
הפונקציה לוקחת את הip הפנימי שלה ושמה בו את הכתובת של dummy
אבל בסוף הפונקציה ip הפנימי מת, ואיתו הכתובת שהוא הכיל (הכתובת של dummy)

אם אתה רוצה לשנות את ip החיצוני, אתה צריך להעביר את הכתובת של ip החיצוני לפונקציה, ורק אז היא תוכל לשנות אותו, כי זה מה שאפשר לעשות עם פוינטרים!

מצד אחד ip הוא מצביע בעצמו, אבל אנחנו רוצים לשנות אותו בתוך הפונקציה (שמקבלת רק עותק של הערך שמעבירים אליה), אז הפונקציה צריכה לקבל מצביע למצביע


void f(int **ipp)
{
static int dummy = 5;
*ipp = &dummy;
}

...

int *ip;
f(&ip);

עכשיו אנחנו מעבירים לf את הכתובת של ip (כתובת של מצביע), ובתוך הפונקציה אנחנו משתמשים בעותק של הכתובת הזאת כדי לשנות את ip (לשנות את המצביע)

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


מקור
http://c-faq.com/ptrs/passptrinit.html


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Grass-Boyy
חבר מתאריך 9.6.03
3603 הודעות
   21:29   30.01.07   
אל הפורום  
  7. לא הבנתי - כנס:  
בתגובה להודעה מספר 5
 
   מה ההבדל בין מצביע לבין מצביע למצביע ולמה זה שימושי?
ולמתי אני יצטרך את זה !!?

תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Grass-Boyy
חבר מתאריך 9.6.03
3603 הודעות
   21:32   30.01.07   
אל הפורום  
  8. מצביע על מצביע מעתיק את הכתובת בלי לפגוע בכתובת ההתחלתית?  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net