saalek
مدیر بازنشسته
//Listing 5.4 -demonstrates passing by value
1:#include <iostream>
2:
3:void swap(int x,int y);
4:
5:int main()
6:{
7:int x =5,y =10;
8:std::cout <<“Main.Before swap,x:“ <<<x
9:<<“ y::“ <<<y <<“\n ”;
10:swap(x,y);
11:std::cout <<“Main.After swap,x:“ <<<x
12:<<“ y::“ <<<y <<“\n ”;
13:return 0;
14:}
15:
16:void swap (int x,int y)
17:{
18:int temp;
19:std::cout <<“Swap.Before swap,x:“ <<<x
20:<<“ y::“ <<<y <<“\n ”;
21:temp =x;
22:x =y;
23:y =temp;
24:std::cout <<“Swap.After swap,x:“ <<<x
25:<<“ y::“ <<<y <<“\n ”;
26:}
Main.Before swap.x:5 y:10
Swap.Before swap.x:5 y:10
Swap.After swap.x:10 y:5
Main.After swap.x:5 y:10
5 OUTPU1:#include <iostream>
2:
3:void swap(int x,int y);
4:
5:int main()
6:{
7:int x =5,y =10;
8:std::cout <<“Main.Before swap,x:“ <<<x
9:<<“ y::“ <<<y <<“\n ”;
10:swap(x,y);
11:std::cout <<“Main.After swap,x:“ <<<x
12:<<“ y::“ <<<y <<“\n ”;
13:return 0;
14:}
15:
16:void swap (int x,int y)
17:{
18:int temp;
19:std::cout <<“Swap.Before swap,x:“ <<<x
20:<<“ y::“ <<<y <<“\n ”;
21:temp =x;
22:x =y;
23:y =temp;
24:std::cout <<“Swap.After swap,x:“ <<<x
25:<<“ y::“ <<<y <<“\n ”;
26:}
Main.Before swap.x:5 y:10
Swap.Before swap.x:5 y:10
Swap.After swap.x:10 y:5
Main.After swap.x:5 y:10
احضار يك تابع با مقدار:
قسمت آبي تابع احضار شده است.
روشي كه در بالا مي بينيد براي صدا كردن تابع، همان روشي است كه ما به طور معمول هميشه استفاده مي كنيم. يعني داخل پرانتز ، ورودي تابع را ارسال مي كنيم.
قسمت سبز رنگ
برنامه بالا براي اين نوشته شده كه بگه كه با اين روش مقدار فرستاده شده تغيير نمي كند. منظور همان x است. قبل صدا كردن و بعد صدا كردن تابع مقدار x در main همان عدد 5 است.
قسمتي كه با رنگ قرمز مشخص شده ، نتيجه اجراي برنامه است. فقط داخل تابع احضار شده ، مقدار x تغيير كرده. به نظر من (saalek) اين x اصلا آن x نيست كه بگيم تغيير كرده. قبلا گفتيم كه متغير موضعي چيه و گفتيم كه متغيرهايي كه درون تابع تعريف مي شوند هم محلي و هم موضعي اند. پس x داخل تابع احضار شده فرق داره با x داخل main .
.
T