עבור לתוכן

למה מערך בשפת C מתחיל ב-0?

Featured Replies

פורסם

בדקתי בגוגל ויש המון תשובות שונות ולא מובנות ואני עדיין לא מבין למה זה מתחיל ב0 ולא ב 1

אשמח לקבל תשובה.

פורסם

אני מניח שזה בגלל שאפס זאת הספרה הראשונה

פורסם

אין תשובה לשאלה הזאת. בכל השפות זה ככה.

פורסם

בשפת מחשבים, תמיד מתחילים באפס.

אשאל אותך אחרת, למה אתה מתחיל מ-1? הרי אם תסתכל על הספרה 10, שים לב מאיפה התחלת... מאפס.

פורסם

אין תשובה לשאלה הזאת. בכל השפות זה ככה.

כמעט בכל השפות :) (ב-VB מתחילים מ-1 כברירת מחדל).

ב-C דווקא יש לזה הסבר די פשוט. מערך הוא פשוט סדרה של משתנים שיושבים באופן רציף בזכרון. המשתנה שמחזיק את המערך הוא בעצם מצביע לאיבר הראשון בסדרה הזו (כידוע, ב-C מערכים ומצביעים הם שקולים במידה מסויימת). אם a הוא מערך, אז גישה ל-[a[j שקולה ל-(a+j)*, כלומר "קח את a, התקדם j צעדים והחזר את מה שיושב שם בזכרון". לכן גישה לתא הראשון במערך מתבצעת ע"י "התקדם 0 צעדים", ולכן [a[0 הוא התא הראשון במערך.

פורסם

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

אינדקס 0 אומר שנמצאים בתחילת הבלוק, ולכן אין צורך ב offset מתחילת הבלוק.

לצורך העניין,

אם נגדיר

int[5] a

אז שני הביטויים הבאים שקולים:

c=a[3]

ו

c=*(a+2*sizeof(int))

יכול להיות שיש לי טעויות סינטקטיות, אבל זה העיקרון

פורסם
  • מחבר

הבנתי!

תודה על ההסבר.

ארכיון

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

דיונים חדשים