לא מבין משהו במערך CHARים, בC - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

לא מבין משהו במערך CHARים, בC


SweeT_EviL

Recommended Posts

  • תגובות 50
  • נוצר
  • תגובה אחרונה

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

פה בעצם "ההגבלה" של המערך ( אי יכולת לשנות את הכתובת אליה הוא מצביע בזמן הריצה).

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

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

http://www.eskimo.com/~scs/cclass/notes/sx10b.html

http://www.cs.umd.edu/class/spring2003/cmsc311/Notes/BitOp/pointer.html

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

קישור לתוכן
שתף באתרים אחרים

לא.

מה שרשמת בשורה השנייה זה לא מצביע "קבוע"/סטטי אלה מצביע לקבוע. כלומר אתה יכול לשנות את הכתובת ש s מכיל, אבל לא ניתן לשנות את ערך התא שאליו הוא מצביע.

במערך זה ההפך, ניתן לשנות את ערכי התאים. אבל לא ניתן לשנות את הכתובת שהמערך מכיל( כתובת התחלת המערך).

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

int i=17;
int* const p1 = &i;
*p1 = 29;

קישור לתוכן
שתף באתרים אחרים

סבבה, עובד.

אבל לא נראה לך פתרון די דבילי? כאילו אין פונקצית קליטה נורמלית או שהם רק בC++?

נוצרו לי עוד שאלות

למה אני לא יכול לרשום CLRSCR(); לפני הגדרת המשתנים(אה, זה בגלל שההגדרה חייבת להיות ראשונה?)?

ויש לי שאלה שהולכת ככה

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

עכשיו פתרתי את זה רק עם STRLEN, יש דרך בלי?

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...