در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آشنایی با کلمات کلیدی fixed در سی شارپ برای کار با Pointer ها

در زبان سی شارپ، می توان از آرایه ها به صورت Pointer استفاده کرد. یعنی Pointer ای تعریف کنیم که به یکی از خانه های آرایه اشاره می کند. اما مشکلی که وجود دارد این است که آرایه ها توسط GC مدیریت می شوند و ممکن است در طول اجرای عملیات GC آرایه ها در حافظه جابجا شوند، در حالی که ما Pointer ای که ایجاد می کنیم به آدرس حافظه یکی از خانه های آرایه اشاره می کند و این موضوع می تواند باعث بروز مشکل شود. برای حل این مشکل می توانیم از کلمه کلیدی fixed استفاده کنیم. کلمه کلیدی fixed به gc می گوید که آرایه مورد اشاره می بایست در حافظه ثابت مانده و مکان آن تغییری نکند. البته این موضوع می تواند باعث بروز به هم ریختگی حافظه شود، اما برای کار با آرایه بوسیله Pointer ها باید مکان آن را در حافظه ثابت کرد.

در ادامه با مثالی با کاربرد این کلمه کلیدی آشنا می شویم، فرض کنید آرایه داریم و می خواهیم مقادیر آن را بوسیله Pointer ها در خروجی چاپ کنیم، در اولین قدم می بایست آرایه را بوسیله کلمه کلیدی fixed در حافظه ثابت نگه داریم:

unsafe
{
    int[] numbers = { 2, 6, 1, 3, 8, 7 };

    fixed (int* pointer = &numbers[0])
    {
        Console.WriteLine(*pointer);
    }
}

با اجرای کد بالا عدد 2 در خروجی چاپ می شود. حال می خواهیم خانه های دیگر آرایه را نیز در خروجی چاپ کنیم، آرایه ها به صورت خطی در حافظه قرار میگیرند، یعنی مقادیر به ترتیب و پشت سر هم در حافظه ذخیره شده اند و می توانیم بوسیله عملگر ++، pointer را یک خانه به سمت جلو حرکت دهیم. اما مشکلی که وجود دارد این است که pointer تعریف شده در قسمت fixed در بدنه آن قابل تغییر نیست، زیرا pointer به صورت readonly تعریف ایجاد می شود، به همین دلیل می بایست Pointer دیگری در بدنه fixed تعریف کرده و از آن استفاده کنیم، مانند کد زیر:

unsafe
{
    int[] numbers = { 2, 6, 1, 3, 8, 7 };

    fixed (int* pointer = &numbers[0])
    {
        Console.WriteLine(*pointer);
        int* tempPointer = pointer;
        tempPointer++;
        Console.WriteLine(*tempPointer);
    }
}

همانطور که مشاهده می کنید عملگر ++ بدون مشکل بر روی اشاره گر tempPointer کار می کند و عدد 6 بعد از عدد 2 در خروجی چاپ می شود. پس به خاطر داشته باشیم، در صورتی که بخواهیم اشاره گری برای آرایه ها تعریف کنیم، ابتدا باید مکان آن آرایه را در حافظه بوسیله کلیمه کلیدی fixed ثابت کنیم. ITPRO باشید

نویسنده: حسین احمدی

منبع: ITPRO

#pointer_ها_در_سی_شارپ #اشاره_گر_به_آرایه_در_سی_شارپ #اشاره_گرها_در_سی_شارپ #کلمه_کلیدی_fixed_در_سی_شارپ
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....