تالار گفتمان مانشت
روش های فراخوانی توابع by name/value/ref - نسخه‌ی قابل چاپ

روش های فراخوانی توابع by name/value/ref - csharpisatechnology - 09 آذر ۱۳۹۱ ۰۱:۳۱ ق.ظ

اینم یک PDF در این زمینه :

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.

اگه لینک خراب بود به این لینک مراجعه کنید:

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


انواع ارسال پارامتر به توابع - csharpisatechnology - 09 آذر ۱۳۹۱ ۰۲:۰۸ ب.ظ

[تصویر:  146205_1_1379087641.gif]

ALGOL ، فراخوانی با نام(NAME)
==
FORTRAN ،با ارجاع (REF)
==
C ، با مقدار (Val)
==
در CPP و PASCAL فراخوانی با ByVal+ByRef
==
در CPP اگر قبل از نام پارامتر & بگذاریم ، فراخوانی با آدرس(ارجاع) انجام می شود.
==
در الگول_w فراخوانی با مقدار_نتیجه معرفی شده است.
==
منبع :جزوه ی قبایی

روش های فراخوانی توابع by name/value/ref - a.hooshmand - 09 آذر ۱۳۹۱ ۰۴:۲۰ ب.ظ

تا جایی که من میدانم در عمل c و cpp مثل هم هستند!

روش های فراخوانی توابع by name/value/ref - blackhalo1989 - 09 آذر ۱۳۹۱ ۰۴:۴۶ ب.ظ

در عمل اینطور نیست Big Grin
در زبان C شما نمیتونید با &, call by ref کنید چون اصلا این کاربرد & که به عنوان ref به یه متغیر هست تو C++ اضافه شد. وقتی ما از & در توابع استفاده می کنیم، عملا داریم از این ویژگی که مربوط به C++ (و نه C) هست استفاده می کنیم.
اینکه شما میگید تو عمل فرقی نداره چون ما از کامپایلر های C++ استفاده می کنیم که تمامی C رو هم ساپورت میکنن.

روش های فراخوانی توابع by name/value/ref - a.hooshmand - 09 آذر ۱۳۹۱ ۰۵:۰۸ ب.ظ

پس تابع scanf زبان c چگونه کار می کند؟

روش های فراخوانی توابع by name/value/ref - blackhalo1989 - 09 آذر ۱۳۹۱ ۰۵:۲۵ ب.ظ

& برای آدرس تو C بوده ولی شما این گد رو در نظر بگیرید:
int x;
int& foo = x;
foo = 56;

این کاربرد برای & تو سی++ اضافه شد. شما وقتی دارید یه تابع رو call by ref میکنید دارید از این کاربرد & استفاده می کنید. شما تو تعریف تابع int& foo رو مینویسید و تو صدا زدن عملا دارید = x رو مینویسید. اینه که هر دو متغیر به یه مکان از حافظه اشاره میکنن.
به اینجا یه نگاهی بندازید:

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


روش های فراخوانی توابع by name/value/ref - a.hooshmand - 09 آذر ۱۳۹۱ ۰۵:۳۱ ب.ظ

فکر کنم اینجا موضوع بحث در مورد فراخوانی هایی توابع هست.

البته با اشاره گر ها و یونین ها هم می توان چنین چیزی در زبان C پیاده ساری کرد

به خط های اول نوشته دقت کن....
C++ references allow you to create a second name for the a variable that you can use to read or modify the original data stored in that variable. While this may not sound appealing at first,
خوب این بیشتر برای دسترسی به یک متغییر با ۲ نام هست و به قول نویسنده اول کاربردی به نظر نمی آید و ....

فکر نمی کنم به موضوع تایپیک هم این رابطه داشته باشد.
به جز اینکه چون عنوانش C++ References هست ممکن است در لحظه اول اشتباه شود که در مورد موضوع تایپیک کار برد دارد!!!!

فراخوانی با نام _ call by name - csharpisatechnology - 09 آذر ۱۳۹۱ ۰۶:۰۵ ب.ظ

مثالی از فراخوانی با نام/اسم (call by name)
نکته : این روش همان روش فراخوانی با ارجاع(آدرس)(by reference) است. در فراخوانی با ارجاع(آدرس)،مقدار پارامتر ها از داخل تابع دستکاری نمی شوند ولی در فراخوانی با نام ابتدا نام پارامترهای ورودی به جای متغیرهای تابع جایگزین شده و سپس مقداردهی و دستکاری می شوند.
=
تست :
در زبان فرضی زیر اگر فراخوانی با نام (call by name) باشد خروجی را بیابید
=
تست :
در زبان فرضی زیر اگر فراخوانی با نام (call by name) باشد خروجی را بیابید.
void function Exchange(x,y:integer);
BEGIN
temp=x
x=y
y=temp
END;
i=4;A[1]=8;A[2]=6;A[3]=4;A[4]=2;
Exchange(i,A[i]);
print(i,A[i],A[2],A[3],A[4]);
خروجی از چپ به راست:
۲,۸,۴,۴,۲

[تصویر:  146252_1_1379087641.gif]
==

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.

==
منبع :
گسترش علوم پایه
مقسمی
طراحی و پیاده سازی زبان های برنامه سازی(چاپ مهر ۸۷)(ص۹۳)
==
ویرایش : ۶۸ تا بازدید داریم حتی یه تشکر هم نزدین.خیلی با انصافینSad

روش های فراخوانی توابع by name/value/ref - zibaziba - 28 دى ۱۳۹۱ ۱۱:۲۷ ب.ظ

سلام
ببخشید احساس می کنم قسمت خروجی جوابتون اشتباهه

روش های فراخوانی توابع by name/value/ref - csharpisatechnology - 15 بهمن ۱۳۹۱ ۰۵:۲۹ ق.ظ

احساس نکنید اثبات کنیدBig Grin