فراخوانی با نام - نسخهی قابل چاپ |
فراخوانی با نام - mahsa.tsi - 20 آذر ۱۳۹۱ ۰۹:۵۸ ق.ظ
سلام در زیر تابع فراخوانی با نام دارد: B[0]=2; B[1]=3 I=0; f(B[I])//call by name در تابع f مقدار I تغییر بکنه روی I تاثیر نمیزاره نه؟ و اینکه تنها تغییرات بر روی B[0] صورت میگیره؟درسته؟ |
RE: فراخوانی با نام - mp1368 - 20 آذر ۱۳۹۱ ۱۰:۴۱ ق.ظ
سلام . شما باید توجه کنی که اینجا تنها آرایه B رو به صورت "فراخونی با نام" به زیر برنامه میفرستی و داخل زیر برنامه هم شما با یه متغیر مثل x که به جای آرایه میشینه میتونی به آرایه اصلی دسترسی داشه باشی . ولی در مورد متغیر i باید بگیم که این متغیر رو که شما به زیر برنامه نفرستادی چطور تابع F باید بهش دسترسی داشته باشه؟ پس برای رجوع به i داخل زیر برنامه باید حتما اونو به صورت سراسری تعریف کنی. مثال زیر رو ببین :
[tex]Var $ i : integer[/tex]
[tex]function $ f(x:integer):interger;[/tex] [tex] i=1;[/tex] [tex] x=1;[/tex] [tex] i=3;[/tex] [tex] x=3;[/tex] [tex] end[/tex] [tex] begin[/tex] [tex] B:array[1..10] of integer[/tex] [tex] i=1;[/tex] [tex] f(B[i]);[/tex] [tex] End.[/tex] توی این مثال ما فقط آرایه B رو به صورت "فراخونی با نام" به زیر برنامه F فرستادیم و متغیر i رو هم برای ارتباط این دو تابع به صورت سراسری تعریف کرده ایم . اگر ما متغیر i رو به صورت سراسری تعریف نمیکردیم قطعا خطا وجود داشت چون داخل تابع F متغیر i تعریف نشده است . پس اونو به صورت سراسری تعریف میکنیم و به دلیل اینکه متغیر سراسری هستش پس داخل تابع F یا هر جای دیگه ای که مقدارش رو تغییر بدیم روش تاثیر میگذاره و مقدارش عوض میشه . یعنی بعد از اجرای این برنامه متغیر i هم مقدارش با ۳ تغییر میکنه فقط به خاطر اینکه به صورت سراسری تعریف شده است. در واقع اگه بخوایم خیلی خلاصه بگیم متغیر i کلید ارتباط این دو تابع است که میخوان به صورت "فراخوانی با نام" و به کمک آرایه B با هم ارتباط داشته باشن و میدونیم برای ایجاد همچین ارتباطی باید i رو به صورت سراسری تعریف کنیم. |
RE: فراخوانی با نام - mahsa.tsi - 27 دى ۱۳۹۱ ۰۹:۳۸ ب.ظ
(۲۰ آذر ۱۳۹۱ ۱۰:۴۱ ق.ظ)mp1368 نوشته شده توسط: سلام . ببخشید که خیلی دیر تشکر میکنم توضیحتون خیلی خوب بودممنون |
فراخوانی با نام - csharpisatechnology - 28 دى ۱۳۹۱ ۰۳:۳۶ ق.ظ
اولا باید مشخص کنی توی تابع دقیقا چه چیزهایی داریم. چون ممکنه I متغیری سراسری بیرون تابع باشه.ممکن هست یه I دیگه داخل خودشم تعریف کرده باشیم. به نظر میاد سراسری هست و توی تابع تعریف نشده.پس اگه از توی تابع بیایم دستکاریش کنیم باید دستکاری اعمال بشه. ضمنا فراخوانی با نام به جای ورودی تابع شما عبارت [۰]B دقیقا ابتدا جایگزین تمام متغیرهای منتسب میشه. و در نهایت روی خود [۰]B هم تغییرات اعمال میشه(زیرا شبیه فراخوانی ارجاعی هست) --- مثال اگه میخواید : مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمیباشید. جهت مشاهده پیوندها ثبت نام کنید. |
فراخوانی با نام - Engineer - 04 بهمن ۱۳۹۱ ۰۵:۳۷ ب.ظ
(۲۰ آذر ۱۳۹۱ ۱۰:۴۱ ق.ظ)mp1368 نوشته شده توسط:ببخشید آخرش اگه فراخوانی با نام بشه جوابش چی میشه؟ |
فراخوانی با نام - csharpisatechnology - 15 بهمن ۱۳۹۱ ۰۵:۳۵ ق.ظ
نه تاثیر نمیذاره چون ورودی B[0 جایگزینه میشه نه b[I |