اشاره گرها
مقدمه:
- آدرس هر متغیر را در حافظه , اشاره گر گویند .
- بایت یکی از تقسیمات حافظه است .به عبارت دیگر ,حافظه کامپیوتر ,مجموعه ای از چندین بایت است . هر بایت دارای یک شماره ردیف است .شماره ردیف هر بایت از حافظه را آدرس آن محل از حافظه گویند.
- متغیرها نامی برای محل های حافظه اند ولذا بایت هایی از حافظه را اشتغال می کنند. آدرس اولین بایتی از حافظه که به متغیر اخنصاص می یابد ,آدرس آن متغیر است .
کاربردهای اشاره گرها
اقلب قابلیت های c به نقش اشاره گرها در این زبان برمی گردد:
تخصیص حافظه پویا : در این نوع تخصیص حافظه ,برنامه در زمان اجرا از سیستم حافظه می گیرد و در صورت عدم نیاز ,آن حافظه را به سیستم بر می گرداند. موجب بهبود کارایی توابع می شود (توابع را با استفاده از آدرس آن ها می توان فراخوانی کرد). سهولت کار با رشته ها و آرایه ها. ارسال آرگومان ها از طریق فراخوانی با ارجاع را امکان پذیر می سازد .
متغیر های اشاره گر
اشاره گر می تواند در متغیری ذخیره شود .اما ,با اینکه اشاره گر یک آدرس حافظه است و آدرس حافظه نیز یک عدد است ,ولی نمی توان آن را در متغیرهایی از نوع int , double و یا غیره ذخیره کرد. متغیری که می خواهد اشاره گر را ذخیره کند باید هم نوع با اشاره گر باشد .این متغیر ها را متغیرهای اشاره گر گویند. برای تعریف متغیرهای اشاره گر در زبان c به صورت زیر عمل می شود:
; متغیر∗ نوع
در تعریف متغیر اشاره گری که بخواهد آدرس متغیرهایی را نگه داری کند, باید نوع متغیر اشاره گری را هم نوع با آن متغیر ها در نظر گرفت و در کنار متغیر اشاره گر,علامت ∗ را قرار داد.
عملگرهای اشاره گر
عملگر & (آدرس) و ∗(محتویات)
هر یک از این دو عملگر یک عملوند دارند . عملگر & , آدرس عملوند خودش را مشخص می کند .عملگر ∗ محتویات جایی را مشخص می نماید که عملوندش به آن اشاره می کند
نکته:
اشاره گرها در زبان c دارای نوع اند . یعنی وقتی اشاره گری از نوع int تعریف می شود , باید به متغیر هایی از نوع int اشاره نماید و اشاره گر از نوع double باید به متغیر هایی از همین نوع اشاره نماید.
اگر نوع متغیری که آدرس آن در یک اشاره گر قرار می گیرد , با نوع اشاره گر یکسان نباشد ,کامپایلر زبان c خطایی را اعلام نمی کند .
مثال: خروجی کد مقابل چیست؟
اعمال روی اشاره گرها
تعداد اعمالی که می توان روی اشاره گر ها انجام داد بسیار کمتر از اعمالی است که روی متغیرهای دیگر می توان انجام داد .
عمل انتساب اشاره گرها به یکدیگر.
اعمال محاسباتی جمع و تفریق.
عمل مقایسه اشاره گرها .
انتساب اشاره گرها به یکدیگر
اگر x و y دو متغیر باشند, دستور x=y آنچه را که در y قرار دارد در x قرار می دهد .این عمل را انتساب y به x گویند. دو اشاره گر را نیز می توان به یکدیگر نسبت داد . در این صورت هر دو اشاره گر به یک محل از حافظه اشاره خواهند کرد.
اعمال محاسباتی
اعمال جمع و تفریق را می توان بر روی اشاره گرها انجام داد.
با افزایش یک واحد به اشاره گر,به اندازه طول نوع اشاره گر ,به آن اضافه می شود.با کاهش یک واحد از اشاره گر به اندازه طول نوع اشاره گر از آن کم می شود.
مقایسه اشاره گرها
اگر p1 و p2 دو اشارگر باشند, با استفاده از عملگرهای رابطه ای مانند متغیر های معمولی با هم مقایسه می شوند.یعنی مقدار آدرس هر یک از اشاره گرها ,عدد بزرگتری باشد ,آن اشاره گر بزرگتر خواهد بود.
مثال: با استفاده از دستورات زیر ,دو اشاره گر p1 و p2 با هم مقایسه می شوند.فرض کنید p1 به محل ۱۰۰۰ حافظه و p2 به محل ۱۰۰۲ حافظه اشاره می کند .در این صورت شرط (p1==p2) ارزش نادرستی دارد.
با سلام وتشکر از زحماتی که میکشید وان را رایگان ارایه میدهید
نحوه اموزش عالی است
سلام
خدا قوت، عالی بود.
فقط در تصویر دوم مربوط به انتساب p1 نمیتواند به هر دو خانه اشاره کند و باید فقط به دومین خانه انتساب داده شده اشاره کند.
ممنون
منظور از پیکان انتساب دوم به y بعد از اجرای خط آخر است . البته حق با شماست و باید با رنگ متفاوتی نشان داده میشد
عالی بود! ممنون!
سلام چه طور میتوان به یک اشاره گر مقدار اولیه داد؟
در صورت امکان اجرای یک تابع از طریق آدرسش را با ذکر یک مثال توضیح دهید
با سپاس
اگر منظورتون آدرس دهی به سخت افزاره که نه , این کار ممکن نیس .
حرف نداره
ممنون از توضیحات عالی شما
من توسایتا کامنت نمیزارم ولی انقد خوب بود مشکلمو حل کرد ک باید بگم خیلی ممنون