close
دانلود فیلم
اشاره گر و آرايه

اشاره گر و آرايه

ارتباط خاصی بين اشاره گرها و آرايه ها در ++C وجود دارد. از اشاره گرمی توان برای پيمايش آرايه ها استفاده کرد. در حقيقت اسم يک آرايه بدون هيچ انديسی اشاره گری به اولين خانه آن است. اگر آرايه ای به نام []array تعريف کرده باشيد array به اولين خانه آرايه اشاره می کند. بنابراين می توان به صورت غير مستقيم توسط عملگر * به عناصر آن دسترسی پيدا کرد. يعنی *array اولين خانه آرايه است و *(array+1) خانه دوم و به همين ترتيب الی آخر.

*(array) == array[0]
*(array + 1) == array[1]
*(array + 2) == array[2]
...
*(array + n) == array[n]

به عملگر & برای بدست آوردن آدرس آرايه نياز نيست البته می توان توسط &array[0] هم آدرس اولين عنصر آرايه را بدست آورد يعنی array == &array[0].


مثال. برنامه زير عناصر آرايه A را توسط اشاره گر نمايش می دهد.

#define MAX 10
int A[MAX] = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};
for (int i=0 ; i<10 ; i++)
   cout << *(A+i) << endl;

شکل زير ارتباط آرايه و آدرس های را نشان می دهد.


نکته. استفاده از اشاره گر برای آرايه روش سريع تری نبست نوشتن به انديس آرايه است.
نکته. هنگام کار کردن با آرايه توسط اشاره گر کامپايلر شروع و پايان آرايه را چک نمی کند بنابراين خودتان بايد مواظب باشيد از محدوده عناصر آرايه عبور نکنيد.
نکته. بخاطر داشته باشيد اسم آرايه يک ثابت اشاره گری است و نمی تواند تغيير کند و در طی اجرای برنامه ثابت می ماند.


اشاره گر و رشته

رشته يک آرايه کاراکتری است که به کاراکتر null ختم می شود. مانند آرايه نام رشته اشاره گری به اولين کاراکتر آن است بنابراين برای کار با رشته ها يک اشاره گر به کاراکتر بکار می آيد.


مثال. متغير Msg1 اشاره گری به کاراکتر است که با يک ثابت رشته ای مقداردهی اوليه شده است. 1Msg به اولين کاراکتر اين رشته اشاره می کند.

char *Msg1 = "This is a message";


راه ديگر برای استفاده اشاره گر برای رشته ها اختصاص فضای پويا به متغير اشاره گر است.


مثال. Msg2 متغير اشاره گری است که در حافظه پويا ايجاد شده است.

Msg2 = new char[16];
if (Msg2 == NULL) {
   cerr << "Could not allocate sufficient space" << endl;
   exit(1);
   }
strcpy(Msg2, "A new message");
cout << Msg2 << endl;
delete [] Msg2;

لینک کوتاه پست
مطالب مرتبط با پست جاری
  • نکات مهم
    1- لطفا نظر خود را با زبان فارسی بیان کنید
    2- رایتم نظرات اسپم و تبلیغی شما را تایید نمی کند
    3- لطفا نظرات شما بدون ابهام و واضح باشد
  • نام
    ایمیل (منتشر نمی‌شود) (لازم)
    وبسایت
    :):(;):D;)):X:?:P:*=((:O@};-:B/:):S
    نظر خصوصی
    مشخصات شما ذخیره شود ؟[حذف مشخصات] [شکلک ها]
    کد امنیتی
به کانال تلگرام سایت ما بپیوندید