نمایش نتایج 1 تا 2 از 2

نام تاپیک: تعریف lenght یک ارایه global بعد از تابع main

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    تیر 1392
    پست
    65
    تشکر کردن
    28
    2 بار تشکر شده در 2 پست

    تعریف lenght یک ارایه global بعد از تابع main

    سلام خدمت دوستان.
    من در زبان c یک ارایه دوبعدی از نوع char دارم که به صورت زیر تعریف کردم.

    char myarray[1000][18];


    بعد دوم ارایه همیشه شامل 18 المنت هست.
    اما بعد اول ماکزیمم المنتش 1000 تا هست.
    در صورتی که گاهی اوقات فقط در حد 2 یا 3 المنت (از بعد اول) نیاز هست . و تعریف 1000 المنت واسش فقط حافظه رو پر میکنه (+ توی اسکن کردن ارابه هم به شدت زمان تلف میکنه.)
    فرض کنید من تعداد المنتی که نیاز دارم را در متغیری به نام k ذخیره کردم. حالا میشه به صورت char myarray[k][18] ارایه را تعریف کرد.
    اما مشکلی که هست اینه که متغیر k تو تابع main مقدار دهی میشه.
    از طرفی ارایه ی من global هست و نمیتونم توی main تعریفش کنم.
    + امکان استفاده از پوینتر ها را هم ندارم.

    ممنون میشم راهنمایی کنید.

  2. #2
    کاربر جدید
    تاریخ عضویت
    بهمن 1393
    پست
    27
    تشکر کردن
    5
    6 بار تشکر شده در 6 پست

    نقل قول: تعریف lenght یک ارایه global بعد از تابع main

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

    مورد دوم اینه که ابعاد آرایه متغیر باشه که شما باید از malloc استفاده کنی. malloc اشاره گر نیست بلکه مکانیزمی برای گرفتن حافظه از heap هست.
    اگر ابعاد آرایه در زمان کامپایل مشخصه از این روش میتونید استفاده کنید:


    #define ROWS ...
    #define COLS ...

    int (*arr)[COLS] = malloc(sizeof *arr * ROWS);
    if (arr)
    }
    do stuff with arr[i][j] //
    free(arr)
    {
    }اگر ابعاد آرایه در زمان کامپایل مشخص نباشه و شما از کامپایلر C99 و C2011 استفاده میکنید، از این روش استفاده کنید
    size_t rows, cols;
    assign rows and cols//
    int (*arr)[cols] = malloc(sizeof *arr * rows);
    if (arr)
    }
    do stuff with arr[i][j]//
    free(arr);
    {
    اگر ابعاد آرایه در زمان کامپایل مشخص نباشه و شما از کامپایلر C99 و C2011 استفاده نمیکنید، از این روش استفاده کنید
    size_t rows, cols;
    // assign rows and cols
    int *arr = malloc(sizeof *arr * rows * cols);
    {
    // do stuff with arr[i * rows + j]
    free(arr);
    }
    آخرین ویرایش به وسیله m.r226 : جمعه 02 تیر 1396 در 15:44 عصر

تاپیک های مشابه

  1. مبتدی: چگونگی لحاظ کردن محتوای یک آرایه دوبعدی بعد از ارسال به تابع
    نوشته شده توسط aghooshebahar در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 2
    آخرین پست: دوشنبه 14 مرداد 1392, 22:24 عصر
  2. سوال: جستجوی یک عدد در یک ارایه با استفاده از تابع بازگشتی
    نوشته شده توسط atoorpatkan در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 3
    آخرین پست: سه شنبه 26 اردیبهشت 1391, 10:23 صبح
  3. اضافه کردن به ارایه پویا بعد از تعریف
    نوشته شده توسط masoud_cpu در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 2
    آخرین پست: دوشنبه 05 اردیبهشت 1390, 20:19 عصر
  4. پاسخ: 2
    آخرین پست: شنبه 19 آذر 1384, 11:04 صبح
  5. بعد از تابع ExitwindowEX حالا نوبته .........
    نوشته شده توسط sh در بخش VB.NET
    پاسخ: 0
    آخرین پست: شنبه 11 مرداد 1382, 19:08 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •