اطلاعیه

Collapse
No announcement yet.

تابع با خروجی آرایه

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

    تابع با خروجی آرایه

    سلام
    یک تابع میخام بنویسم که خروجی آن آرایه است اما مشکل خوردم. جایی هم مثال ندیدم . تومثال های CODE VISON با پوینتر ها کار کرده بود میخاستم ببینم چجور باید تابع رو نوشت وقتی خروجی آرایه است؟
    کد:
     unsigned char *hexdec(unsigned char *v){
     unsigned char str[8];
    int i;
    for (i=0;i<8;i++){
     str[i]=*v%2;
    *v=*v/2;
    
    
    }
     return(str);
    }
    این تابع رو نوشتم به تقلید ازتابع در کدویژن اما فراخوانی تابع رو نمیدونم چجور انجام بدم. ممنون میشم کلا در زمینه نوشتن تابعی که خروجیش آرایه هست توضیح بدید
    ممنون

    #2
    پاسخ : تابع با خروجی آرایه

    توی زبان c ما تایپی به نام آرایه نداریم که بخوایم به عنوان خروجی بدیمش بیرون. برای همین این کار ممکن نیست. در واقع میتونیم آرایه ای از تایپ های مختلف داشه باشیم.
    آرایه هم در واقع همون پوینتر هست، با این تفاوت که آرایه به مکان خاصی از حافظه اشاره میکنه و پوینتر در ابتدا بهش حافظه اختصاص داده نشده و در روال برنامه میشه این کار رو انجام داد. ولی خب در اصل یه مفهوم اند.
    درک این مفاهیم بسیار بسیار حیاتی هست برای کسی که میخواد c کار کنه
    در واقع هیچ گریزی از یادگیری عمیق پوینتر ها و استفاده مفید از اون ها ندارید. برای تابع بالا هم تنها راه استفاده از پیونتر هست و لا غیر! یه پوینتر توی آرگومان های تابع قرار بدین و آدرس آرایه رو بدین بهش. در ضمن آرایه هم نباید داخل تابع تعریف بشه. چون به محض خروج از تابع، آرایه هم از بین میره

    دیدگاه


      #3
      پاسخ : تابع با خروجی آرایه

      نوشته اصلی توسط magician نمایش پست ها
      توی زبان c ما تایپی به نام آرایه نداریم که بخوایم به عنوان خروجی بدیمش بیرون. برای همین این کار ممکن نیست. در واقع میتونیم آرایه ای از تایپ های مختلف داشه باشیم.
      آرایه هم در واقع همون پوینتر هست، با این تفاوت که آرایه به مکان خاصی از حافظه اشاره میکنه و پوینتر در ابتدا بهش حافظه اختصاص داده نشده و در روال برنامه میشه این کار رو انجام داد. ولی خب در اصل یه مفهوم اند.
      درک این مفاهیم بسیار بسیار حیاتی هست برای کسی که میخواد c کار کنه
      در واقع هیچ گریزی از یادگیری عمیق پوینتر ها و استفاده مفید از اون ها ندارید. برای تابع بالا هم تنها راه استفاده از پیونتر هست و لا غیر! یه پوینتر توی آرگومان های تابع قرار بدین و آدرس آرایه رو بدین بهش. در ضمن آرایه هم نباید داخل تابع تعریف بشه. چون به محض خروج از تابع، آرایه هم از بین میره
      از جوابتون بسیار ممنونم. توی کدویژن استار رو پشت تابع قرار داده بود .استار پشت اسم تابع مفهومش چیه؟ وبعدا در تابع اصلی چجور باید فراخوانیش کرد؟
      اگر ممکن هست کمی بیشتر توضیح بدیدممنونم
      جدیدترین ویرایش توسط masror; ۱۵:۱۶ ۱۳۹۵/۱۰/۱۱.

      دیدگاه


        #4
        پاسخ : تابع با خروجی آرایه

        یه کتابی هست به اسم understanding and using C pointers. حتمن دانلود کن و بخونش

        این تابع رو که اصلا من متوجه نشدم هدفش چیه
        ولی کد زیر رو در نظر بگیر

        کد:
        unsigned char array[10];
        
        
        int func(unsigned char *pointer)
        {
            int i;
            for(i = 0; i < 10; i++)
            {
                *(pointer++) = i; // or pinter[i] = i;
            }
            return 0;
        }
        
        
        int main()
        {
            int i;
            func(array);
            for(i = 0; i < 10; i++)
            {
                printf("i = %d\r\n", array[i]);
            }
            return 0;
        [FONT=Yekan]}[/FONT]

        اینجا من یه آرایه بیرون از تابع ساختم و آدرسش رو پاس دادم به ورودی تابع که از جنس پوینتر هست. حالا داخل تابع اگر شما یادت باشه که آرایه و پوینتر فرقی با هم ندارن، میتونی یا به روش اول پوینتر رو افزایش بدی و مقادیر رو داخل حافظه ای که بهش اشاره میکنه بریزی، یا اینکه مثل یه آرایه باهاش برخورد کنی و بهش ایندکس بدی (کامنت).
        در واقع کاری که انجام دادم، اینه که آرایه array رو دادم به تابع که برام با مقدایر 0 تا 9 پُرش کنه. بهترین و معمول ترین روش همینه
        حالا فرض کن من نمیدونم تابع چه تعداد از خونه های آرایه رو برام پر کرده. میتونم به جای 0، تعداد خونه ها رو return کنم که سایزش رو هم فهمیده باشم

        دیدگاه

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