Contacts
صفحه اصلی پورتال | صفحه اصلی تالار | ثبت نام | اعضاء | گروه ها | جستجو | پرسش و پاسخ | فروشگاه الکترونیکی | خرید پستی بازی های کامپیوتری





صفحه اول انجمنها -> برنامه نویسی با زبان های C++ و Delphi و VB -> Unsafe
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي

Unsafe
نويسنده
پيغام
voldemort
مدیر انجمن
مدیر انجمن


تاريخ عضويت: 4 شنبه 24 تير 1383
تعداد ارسالها: 392
محل سكونت: تهران


جمعه 26 خرداد 1385 - 23:50
پاسخ بصورت نقل قول
توی چند تا از سایتهای فارسی مربوط به برنامه نویسی دیدم که دنبال این هستن که چطوری توی C# از اشاره گرها استفاده می کنن بنابراین این مثال رو از MSDN اینجا آوردم.

كد:


using System;
using System.Collections.Generic;
using System.Text;

namespace Unsafe
{
    class Program
    {
        class TestCopy
        {
            // The unsafe keyword allows pointers to be used within the following method:
            static unsafe void Copy(byte[] src, int srcIndex, byte[] dst, int dstIndex, int count)
            {
                if (src == null || srcIndex < 0 ||
                    dst == null || dstIndex < 0 || count < 0)
                {
                    throw new System.ArgumentException();
                }

                int srcLen = src.Length;
                int dstLen = dst.Length;
                if (srcLen - srcIndex < count || dstLen - dstIndex < count)
                {
                    throw new System.ArgumentException();
                }

                // The following fixed statement pins the location of the src and dst objects
                // in memory so that they will not be moved by garbage collection.
                fixed (byte* pSrc = src, pDst = dst)
                {
                    byte* ps = pSrc;
                    byte* pd = pDst;

                    // Loop over the count in blocks of 4 bytes, copying an integer (4 bytes) at a time:
                    for (int i = 0; i < count / 4; i++)
                    {
                        *((int*)pd) = *((int*)ps);
                        pd += 4;
                        ps += 4;
                    }

                    // Complete the copy by moving any bytes that weren't moved in blocks of 4:
                    for (int i = 0; i < count % 4; i++)
                    {
                        *pd = *ps;
                        pd++;
                        ps++;
                    }
                }
            }

            static void Main()
            {
                byte[] a = new byte[100];
                byte[] b = new byte[100];

                for (int i = 0; i < 100; ++i)
                {
                    a[i] = (byte)i;
                }

                Copy(a, 0, b, 0, 100);
                System.Console.WriteLine("The first 10 elements are:");

                for (int i = 0; i < 10; ++i)
                {
                    System.Console.Write(b[i] + " ");
                }
                System.Console.WriteLine("\n");
                System.Console.ReadLine();
            }
        }
    }
}


فقط بايد يادتون باشه كه در زمان كمپايل از پارامتر /Unsafe استفاده کنید.
ضمنا نباید این برنامه را از داخل VS اجرا کنید. اونو کمپایل کنید و برنامه کمپایل شده رو از ویندوز اجرا کنید.

_________________
First they ignore you;then they laugh at you ;then they fight you ;then you win
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 1 از 1 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |