الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لماذا يبدأ Index المصفوفات من الصفر

بدأه yahya91 في 10 أبريل 2010 · 3 رد · 1,501 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لماذا يبدأ Index المصفوفات من الصفر

هناك قاعدة ذهبية تقول :

اسم المصفوفة = عنوانها

أي أن :

arr=&arr

و لو فرضنا أن شكل الذاكرة هذا هو :

post-217808-12708919390195_thumb.jpg

و بالطبع هذا شكل توضيحي لا أكثر ، ومن المفيد ذكره قبل بدء الشرح أن ترقيم عناوين الذاكرة يبدأ من الصفر و أن الحجم التخزيني لمتغير integer هو 2byte

الشرح:

لنفترض أنه لدينا برنامج يحجز مساحة بين 1024 و 2048 من عنواين الذاكرة و يبدأ عند 1024 بمصفوفة من نوع int أي كل عنصر سيحجز له بايتين فلو قلنا في البرنامج

cout<<arr[0];

فإن الكومبايلر سيفهم لوحده أنها مؤشر لـ

*(1024+0)

فلو أردت أن تصل للعنصر الخامس يمكنك أن تكتب

*(1024+(5*2))

وهكذا

فلو لم يتم البدء من الـindex صفر لكان أول عنصر أٌهمل

و بالتالي نحن عندما نكتب

arr[0]

نحن نصرّح عن مؤشر بالمعنى العام.

و هذا كود يوضح المترادفات حول هذا المجال :

#include<iostream.h>
void main()
{
	int arr[5]={1,2,3,4,5};
	int *ptr=arr;
	for(int i=0;i<5;i++)
	{
		cout<<arr<<"\t";
	}
	cout<<"\n\n\n";
	cout<<"now !!!  reading array element using pointers"<<endl;
for(int j=0;j<5;j++)
	{
		cout<<*(arr+j)<<"\t";
	}
    cout<<endl;
	////ptr=arr=&arr
	for(int k=0;k<5;k++)
	{
		cout<<*(ptr+k)<<"\t";
	}
	cout<<endl;
	cout<<*arr<<endl;//=arr[0]
	cout<<arr<<endl;//=&arr[0]
	cout<<&arr<<endl;//arr=&arr
}

المراجع :

ياهوا إجابات

geekiterview

الشكل التوضيحي للذاكرة و الكود من كتاب مدخل إلى الخوارزميات و البرمجة .

تم تعديل هذه المشاركة بواسطة yahya91 في 10 أبريل 2010 في 12:35

2
#2

شكرا اخي على التوضيح.

لكن انا اظن ان ذلك راجع للانظمة الرقمية : decimal, hexadecimal.... والله اعلم

#3

+1 لكن بشكل عام أعتقد أن السبب الرئيسي في ذلك هو أن الصفر هو أول عدد صحيح يأتي بعد الأعداد السالبة ، وليس السبب متعلق بالمؤشرات أو خلافه .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#4
اقتباس
هناك قاعدة ذهبية تقول :

اسم المصفوفة = عنوانها

هذه القاعده وجدت لأن الـ Standard تقيد صانع المترجم بذلك.

من الـ Standrads جزء conv.array

اقتباس

An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to an rvalue of type

“pointer to T”. The result is a pointer to the first element of the array.

و ايضا جزء dcl.array

اقتباس

An object of array type contains a contiguously allocated

non-empty set of N subobjects of type T

ايضا راجع موضوع المصفوفات و عناويين الذاكرة

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 10 أبريل 2010 في 16:19

مدونتي: C++ Tips and Tricks

مواضيع مشابهة