NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3390 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 12 از 12

موضوع: اشاره گر به تابع در زبان c

  1. #1
    کاربر فعال
    تاریخ عضویت
    Nov 2013
    نوشته ها
    140
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض اشاره گر به تابع در زبان c

    سلام.
    فرض کنید که الگوی یک تابع به صورت زیر باشد :

    (int LCD_SetVRAMAddrEx(int LayerIndex , void *pVRAM

    پارامتر pVRAM یک اشاره گر است ولی کلمه void که قبل از اون اومده چه معنی میده؟
    حالا اگه بخواهیم این تابع را صدا بزنیم آرگومان دومی ( pVRAM ) رو چه جوری باید بنویسیم؟
    اگه میشه یک مثال بزنید.

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    اگر pVRAM تابع باشه که باید تابع رو در ورودی بنویسید. ولی من تا حالا همچین چیزی ندیده بودم که تابع ورودی باشه و یا نوع اشاره گر void باشه!!!!!!!!!!!!!!

  4. #3
    کاربر علاقه مند
    تاریخ عضویت
    Mar 2012
    نوشته ها
    46
    تشکر
    9
    تشکر شده 20 بار در 18 پست

    پیش فرض

    از اونجایی که توابع هم در حافظه ذخیره میشن pointer دارند به جای اون متقیر باید آدرس یه تابع رو بفرستی

  5. #4
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    من خودم تازه فهمیدم که اشاره گر به تابع هم هست.
    اینم لینک توضیحات برای کسانی که نمیدونن
    اشاره‌گر به تابع - ویکی‌پدیا، دانشنامهٔ آزاد

  6. #5
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    اشاره گر به تابع وجود داره. ولی معمولا وقتی از یه تابع به عنوان آرگومان تابع دیگه استفاده میشه که یه مقداری رو برگردونه ولی استفاده از تابع void به عنوان آرگومان چه دلیلی داره؟

  7. #6
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    حتما لازم نیست که یک مقداری رو برگردونه. اون تابع میتونه متغیرهای سراسری دیگه رو تغییر بده.

  8. تشکرها از این نوشته :


  9. #7
    کاربر فعال
    تاریخ عضویت
    Nov 2013
    نوشته ها
    140
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض

    این تابع در کتابخانه emWin و در فایل LCDConf.c وجود داره.

  10. #8
    کاربر فعال rozeh آواتار ها
    تاریخ عضویت
    Mar 2013
    نوشته ها
    198
    تشکر
    27
    تشکر شده 176 بار در 104 پست

    Red face

    به نظر میرسه من لازمه یه مقدار در مورد برخی مباحث توضیح بدم. علت این امر هم اینه که همه فکر می کنن کتاب های آموزشی C مرجع هم هستن.
    در استاندارد C89 ما 5 نوع دیتا داریم.
    Char و int و float و double و در آخر Void
    ما از Void وقتی در خروجی توابع استفاده میکنیم یعنی هیچ خبری نخواهد بود. در واقع هیچ مقداری رو بر نمی گردونه.
    یه جای دیگه هم از این معرف استفاده میکنیم. وقتی می خوایم یه پوینتر عمومی معرفی کنیم. پوینتر عمومی با پوینتر تابع فرق میکنه. اولی واسه داده ای هستش که نوعش معلوم نیست یا شایدم واسه همه نوع داده(از اون 4تای باقی مونده از نوع داده های اصلی. منظورم Char و int و float و double هستش). در مورد این تابعی که
    hamed.b3269 توی پستش ذکر کرده شما void *pVRAM رو می بینید. خب این قطعا پوینتر تابع نیست. دقیقا یعنی بر عکس گفته همه دوستان. چون حرفی از ورودی نزده. یعنی در واقع حداقل باید اینطوری:


    کد:
    void *pVRAM()
    باشه. یعنی یه () جلوش باشه. که نیست. پس پوینتر تابع نیست. حالا چیه؟ خب یه پوینتر عمومی(Void Pointer). توی پوینتر های عادی که استفاده میکنیم باید معرفی کنیم که مقداری که بر می گردونه چیه. درسته که پوینتر ادرس رو حمل میکنه ولی کامپایلر می خواد بدونه که چه نوعی هستش(مقدار مربوط به آدرس چیه). ولی وقتی یه پوینتر رو مثلا اینجوری void *pVRAM تعریف میکنیم یعنی معلوم نیست چه مقداری رو می خواد برگردونه.
    موفق باشید.

  11. کاربران : 6 تشکر کرده اند از شما rozeh برای ارسال این پست سودمند:


  12. #9
    کاربر فعال
    تاریخ عضویت
    Nov 2013
    نوشته ها
    140
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض

    بسیار بسیار از دوست عزیز متشکرم.
    اگه ممکنه یک مرجع خوب و عالی برای زبان c معرفی کنید.

  13. #10
    کاربر فعال rozeh آواتار ها
    تاریخ عضویت
    Mar 2013
    نوشته ها
    198
    تشکر
    27
    تشکر شده 176 بار در 104 پست

    پیش فرض

    نقل قول نوشته اصلی توسط hamed.b3269 نمایش پست ها
    بسیار بسیار از دوست عزیز متشکرم.
    اگه ممکنه یک مرجع خوب و عالی برای زبان c معرفی کنید.
    خب من همیشه استاندارد زبان رو میگیرم. کاری که هر کدنویس(برنامه نویس) حرفه ای انجام میده(البته من حرفه ای نیستم). استانداردهای مختلفی واسه زبان C وجود داره. بسته به کامپایلر شما، شما باید استاندارد مورد نظرتون رو بگیرید. مثلا من بخاطر اینکه از Keil استفاده میکنم که استاندارد C90 رو پشتیبانی میکنه که یکی از استاندارد های ANSI هستش همیشه یه استاندارد C99 توی کامپیوترم دارم. برای کارم کافیه. این موضوع استاندارد توی مباحث بیس تقریبا همه یکی هستن و فقط در برخی مباحث جزئی تفاوت دارند. گاهی وقتا اگه از دوکامپایلر متفاوت مثل مثلا GCC و keil دارید کار میکنید ولی یهو می بینید که رفتار متفاوتی دارند. علتشون تفاوت بین استانداردهاشون هستش. از گوگل استفاده کن و استاندارد مورد نظرت رو دانلود کن و ازش استفاده کن.

  14. کاربران : 3 تشکر کرده اند از شما rozeh برای ارسال این پست سودمند:


  15. #11
    کاربر فعال
    تاریخ عضویت
    Nov 2013
    نوشته ها
    140
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض

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

  16. #12
    کاربر فعال rozeh آواتار ها
    تاریخ عضویت
    Mar 2013
    نوشته ها
    198
    تشکر
    27
    تشکر شده 176 بار در 104 پست

مجوز های ارسال و ویرایش

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