اشاره گر ها در #C
اشاره گر ها در #C
بدون هیچ مقدمه ای میرم سر اصل مطلب
اشاره گر یه متغیره که کنار نوع اون یه ستاره کوچولو (*) آوردن
و به جای اینکه یه مقداری رو در خودش ذخیره کنه
یه آدرس از رم که مقداری تو اون ذخیره است رو نگه داری میکنه (به اون اشاره میکنه!)
و میتونه به راحتی اونو تغییر بده
نمونه ی اعلان یه اشاره گر(Pointer )
int* X;//
نکته:
اون دسته از عزیزانی که با ++C کار کردن توجه کنن که اعلان اشاره گر در #C یه خورده با
اعلانش تو ++C فرق داره اونم اینه که علامت * به نوع چسپیده نه به نام!!
تا حالا ما تونستیم یه اشاره گر بسازیم با این که ما اونو درست اعلان کردیم
اما این کد قابل کامپایل نیست !!
اگه گفتی چرا؟...!!
ادامه مطلب
چونه بس این کدا خطر ناکن حتما باید تو یه
بلوک نوشته شن که وحش بازی در نیار رم بسوزه!!!!
اسم اون بلوک Unsafe
طرز ساختن اون بلوک هم این طوره
Unsafe
{
//....
}
ما میتونیم کلمه Unsafe رو با یه کلاس یا ساختار
unsafe class MyClass
{
// ...
}
یا فقط یه عضو از کلاس رو Unsafeکنیم!!
class MyClass
{
unsafe int* pi; // ...
}
یا فقط میتونیم قسمتی از یه متد رو unsafe کنیم
void MyMethod()
{
// ...
unsafe
{
// ...
}
// ...
}
اما یه نکته مهم اینه که متغیر های private که در متد ها اعلان میشن نیمیتونن
Unsafe باشن
int Salam()
{
unsafe int* pi; // ...
}
درضمن بهتره که همیشه نام اشاره گر ها رو با حرف P شروع کنین !
حالا اینو هم فهمیدید که چرا کد اولیه ای که ما نوشتیم کامپایل نمیشه
حالا باید بگم با این چیزا یی که یادگرفتین یکی به هدف نزدیک شدین
حالا برنامه رو( متن درون این پرانتز فقط جهت به دام انداختن کپی برداران میباشد)کامپایل کنید!!!
چی شد !!!
حیف دیگه ادامه مطلب نداره!!!
درسته بازم پروژه کامپایل نشد!!!!
دلیلش اینه که بس این کدا خطرناکن!!!
به همین سادگیا که کامپایل نمیشن!!!
اگه بخواین که این کدا کامپایل شن باید به اونا اجازه
بدین!!!
اما چه جوری!!!
دو راه وجود داره:
اگه شما از Command Line استفاده مکینید با ید حتما این کد رو تو برنامه تو بگنجونید:
مثال برای کامپایل فایل سورس Salam باید از این کد استفاده بشه!!
csc /unsafe Salam.cs یا csc -unsafe Salam.cs
اما اگه در محیط ویژال استدیو هستین باید در پنجرهProperties تبBuild گزینه ی Allow unsafe code رو تیک بزنن!
باید عرض کنم که قواعد آعلان اشاره گر ها تقریبا مثل متغیر هاست یهعنی شما میتوید چند تا
اشاره گر رو تو یه سطر فرض کنین و ...
همانطور که متغیر ها عملگر دارن اشاره گر ها عملگر دارن
اونا هم دو تا عملگر (* و &) رو دارن
کار* : گرفتن یه خونه از حافظه که اشاره گر به اون اشاره داره و همچنین نسبت دادن مقدار.
کار &:گرفتن آدرس قسمتی از حافظه که متغیر ی به آن اشاره دارد.
مثال:
unsafe
{
//....
int i = 10;//
int* x;//
x = &i;//
}
تو مثال بالا x به آدرس محلی که I اشاره داره اشاره میکنه !
یعنی میتونیم به طور مستقیم اون قسمت رو تغییر بدیم و اگه تغییر بدیم رو مقدار I
هم اثر داره
unsafe
{
//....
int i = 10;//
int* x;//
x = &i;//
*x = 70;//
}
تو مثال بالا هم مقدار موجود در قسمتی از حافظه که I به اون اشاره داره توسط
اشاره گر X * تغییر پیدا میکنه!
خوب تبریک میگم شما تونستین از یادگیری اشاره گر ها سر بلند بیرون بیاین
امام بهتره این چند نکته رو هم یاد بگیرین
اول از همه تا اونحایی که امکان داره از اشاره گر ها استفاده نکنین
حد اقل تا زمانی که خوب با اونا آشنایی ندارین!
به خاطر داشته باشین که اشاره گر ها کار هایی فراتر از چنجایش این مقاله انجام میدن!
استفاده از اشاره گر ها در جای درست و به جا سرعت برنامه رو افزایش میده!!!
خوب دیگه فکر کنم حرفی نمونده تا سلامی دو باره bye