اطلاعیه

Collapse
No announcement yet.

چرا در کدویژن برای ارایه باید سایز تعریف کرد؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    چرا در کدویژن برای ارایه باید سایز تعریف کرد؟

    سلام دوستان

    نمی توان در کدویزن آرایه بدون سایز تعریف کرد ؟ چه شکلی ؟ :mrgreen:

    #2
    پاسخ : چرا در کدویژن برای ارایه باید سایز تعریف کرد؟

    مگه تو بقیه کامپایلرها میشه همچین کاری کرد؟
    اگه میشه پس اینجا هم احتمالا میشه!
    تاجاییکه یادمه بوسیله پوینتر و فانکشن malloc اینکارو تو سی میشه کرد:
    int sizeOfArray;
    int *yrArray;
    yrArray = malloc(10 * sizeOfArray
    );
    {خلاف قوانین - امضا ویرایش شد}

    دیدگاه


      #3
      پاسخ : چرا در کدویژن برای ارایه باید سایز تعریف کرد؟

      نوشته اصلی توسط nanoware
      مگه تو بقیه کامپایلرها میشه همچین کاری کرد؟
      اگه میشه پس اینجا هم احتمالا میشه!
      تاجاییکه یادمه بوسیله پوینتر و فانکشن malloc اینکارو تو سی میشه کرد:
      int sizeOfArray;
      int *yrArray;
      yrArray = malloc(10 * sizeOfArray
      );
      سلام

      تو خوده برنامه سی می شود

      دیدگاه


        #4
        پاسخ : چرا در کدویژن برای ارایه باید سایز تعریف کرد؟

        نوشته اصلی توسط alirf
        سلام دوستان

        نمی توان در کدویزن آرایه بدون سایز تعریف کرد ؟ چه شکلی ؟ :mrgreen:
        حافظه در زبان C به ۳ صورت مدیریت میشه. Static ، Automatic و Dynamic
        متغیرهایی که در بدنهٔ اصلی برنامه تعریف میآ‌شوند Static هستند و در تمام زمانی که برنامه در حال اجرا است عمر خواهند کرد.
        متغیرهای Automatic در Stack ساخته میآ‌شوند که این متغیرها در بدنهٔ تابع تعریف میشوند و زمانی که تابعی فراخوانی میشود بوجود خواهند آمد و در هنگام برگشت از تابع عمرشان پایان میآ‌یابد و فضای اختصاص داده شده به آنها آزاد میآ‌شود.
        سایز متغیرهای Static و Automatic باید در هنگام کامپایل معلوم باشد.

        اما روش سومی هم وجود دارد که میآ‌توان در هنگام اجرای برنامه فضای با طول دلخواه و متغیر ساخت و از آن استفاده کرد.
        همانطور که دوستمان اشاره کردند این کار توسط تابع malloc انجام میآ‌شود.
        شکل این تابع به این صورت است :
        کد PHP:
        void *malloc(size_t size); 


        که به میزان size حافظه در اختیار برنامهآ‌نویسی قرار میآ‌دهد و اشارهآ‌گری به ابتدای بلوک حافظهٔ اختصاص داده شده برآ‌میگرداند.
        این تابع در صورت شکست در اختصاص دادن حافظه ، مقدار NULL را باز خواهند گرداند.

        در مثال زیر ، فضایی ۱۰ تایی با طول نوع int ایجاد میآ‌شود. مانند یک array نوع int با طول ۱۰
        کد PHP:
        /* Allocate space for an array with ten elements of type int. */
        int *ptr malloc(10 sizeof (int));
        if (
        ptr == NULL) {
          
        /* Memory could not be allocated, the program should handle the error here as appropriate. */
        } else {
          
        /* Allocation succeeded. Do something. */
          
        free(ptr); /* We are done with the int objects, and free the associated pointer. */
          
        ptr NULL/* The pointer must not be used again, unless re-assigned to using malloc again. */



        توجه داشته باشید فضای ایجاد شده تا زمانی که ما آنرا آزاد نکنیم وجود خواهد شد و حافظه را اشغال خواهد کرد.
        برای پایان دادن به عمر فضای ایجاد شده از تابع free استفاده میآ‌شود که در مثال بالا شکل استفاده از آن نشان داده شده است.

        و نکتهٔ آخر اینکه شکل توابع malloc و free در فایل هیدر stdlib.h موجود هستند.

        برای مطالعهٔ بیشتر در این مورد :
        http://en.wikipedia.org/wiki/Malloc
        چگونه هوشمندانه بپرسیم

        دیدگاه

        لطفا صبر کنید...
        X