PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : اشاره گر به تابع در زبان c



hamed.b3269
12-01-2015, 14:03
سلام.
فرض کنید که الگوی یک تابع به صورت زیر باشد :


(int LCD_SetVRAMAddrEx(int LayerIndex , void *pVRAM

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

esisafa
12-01-2015, 23:34
اگر pVRAM تابع باشه که باید تابع رو در ورودی بنویسید. ولی من تا حالا همچین چیزی ندیده بودم که تابع ورودی باشه و یا نوع اشاره گر void باشه!!!!!!!!!!!!!!

hariri2
13-01-2015, 11:23
از اونجایی که توابع هم در حافظه ذخیره میشن pointer دارند به جای اون متقیر باید آدرس یه تابع رو بفرستی

esisafa
13-01-2015, 11:40
من خودم تازه فهمیدم که اشاره گر به تابع هم هست.
اینم لینک توضیحات برای کسانی که نمیدونن
اشاره‌گر به تابع - ویکی‌پدیا، دانشنامهٔ آزاد (You can see links before reply 1_%D8%A8%D9%87_%D8%AA%D8%A7%D8%A8%D8%B9)

mstkmn
13-01-2015, 11:54
اشاره گر به تابع وجود داره. ولی معمولا وقتی از یه تابع به عنوان آرگومان تابع دیگه استفاده میشه که یه مقداری رو برگردونه ولی استفاده از تابع void به عنوان آرگومان چه دلیلی داره؟

esisafa
13-01-2015, 15:17
حتما لازم نیست که یک مقداری رو برگردونه. اون تابع میتونه متغیرهای سراسری دیگه رو تغییر بده.

hamed.b3269
13-01-2015, 18:44
این تابع در کتابخانه emWin و در فایل LCDConf.c وجود داره.

rozeh
14-01-2015, 18:14
به نظر میرسه من لازمه یه مقدار در مورد برخی مباحث توضیح بدم. علت این امر هم اینه که همه فکر می کنن کتاب های آموزشی C مرجع هم هستن.
در استاندارد C89 ما 5 نوع دیتا داریم.
Char و int و float و double و در آخر Void
ما از Void وقتی در خروجی توابع استفاده میکنیم یعنی هیچ خبری نخواهد بود. در واقع هیچ مقداری رو بر نمی گردونه.
یه جای دیگه هم از این معرف استفاده میکنیم. وقتی می خوایم یه پوینتر عمومی معرفی کنیم. پوینتر عمومی با پوینتر تابع فرق میکنه. اولی واسه داده ای هستش که نوعش معلوم نیست یا شایدم واسه همه نوع داده(از اون 4تای باقی مونده از نوع داده های اصلی. منظورم Char و int و float و double هستش). در مورد این تابعی که hamed.b3269 (You can see links before reply) توی پستش ذکر کرده شما void *pVRAM رو می بینید. خب این قطعا پوینتر تابع نیست. دقیقا یعنی بر عکس گفته همه دوستان. چون حرفی از ورودی نزده. یعنی در واقع حداقل باید اینطوری:


void *pVRAM()

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

hamed.b3269
14-01-2015, 23:11
بسیار بسیار از دوست عزیز متشکرم.
اگه ممکنه یک مرجع خوب و عالی برای زبان c معرفی کنید.

rozeh
15-01-2015, 10:27
بسیار بسیار از دوست عزیز متشکرم.
اگه ممکنه یک مرجع خوب و عالی برای زبان c معرفی کنید.

خب من همیشه استاندارد زبان رو میگیرم. کاری که هر کدنویس(برنامه نویس) حرفه ای انجام میده(البته من حرفه ای نیستم:hi:). استانداردهای مختلفی واسه زبان C وجود داره. بسته به کامپایلر شما، شما باید استاندارد مورد نظرتون رو بگیرید. مثلا من بخاطر اینکه از Keil استفاده میکنم که استاندارد C90 رو پشتیبانی میکنه که یکی از استاندارد های ANSI (You can see links before reply) هستش همیشه یه استاندارد C99 (You can see links before reply) توی کامپیوترم دارم. برای کارم کافیه. این موضوع استاندارد توی مباحث بیس تقریبا همه یکی هستن و فقط در برخی مباحث جزئی تفاوت دارند. گاهی وقتا اگه از دوکامپایلر متفاوت مثل مثلا GCC و keil دارید کار میکنید ولی یهو می بینید که رفتار متفاوتی دارند. علتشون تفاوت بین استانداردهاشون هستش. از گوگل استفاده کن و استاندارد مورد نظرت رو دانلود کن و ازش استفاده کن.

hamed.b3269
16-01-2015, 19:47
خیلی ممنون.
برای دانلود این استانداردها باید پول پرداخت کنیم.
شما لینک دانلود رو ندارین.

rozeh
16-01-2015, 21:11
منم همون چیزایی رو دارم که توی این دو صفحه هست:

c - Where can I read C99 official language standard manual/reference/specification online? - Stack Overflow (You can see links before reply)

ویا

Where do I find the current C or C++ standard documents? - Stack Overflow (You can see links before reply)