伊莉討論區

標題: C++三種演算法的問題@@搞不清楚差在哪.. [打印本頁]

作者: 紫羽翔    時間: 2009-5-6 01:25 AM     標題: C++三種演算法的問題@@搞不清楚差在哪..

用call by address , reference,value三種方法演算~~

輸兩數字a.b;a=b,把a和b對調,是看看函數變,主程式是否改變例子:

1.void fun(int i){i=i+1;}
2.(int&i){i=i+1;}
3.(int&i){*i=*i+1;} 且要分割檔案

以下 是小的我~~的算法..但是@@我不懂什麼的是用那三種方式有什麼不一樣嗎?

#include "stdafx.h"
#include<iostream>
using namespace std;
void data(int *a,int b,int &c)
{
*a=*a+1; c=c+3; cout<<a<<&a<<endl;
}
int main(int argc,char*argv[]){
int a=8,b=9,c=2; data (&a,c,b);
cout<<&a<<endl; return 0;
}
作者: include    時間: 2009-5-6 11:09 AM

就是傳給函數的東西不一樣阿
call by value是把值複製一份傳給函數
所以在函數裡改變在主程式裡不會變
call by point是把這個變數的記憶體位置傳給函數
所以在函數裡改變這個記憶體的值在主程式也會改變
call by reference是傳參照
參照是什麼
基本上你可以把它想像成一個遙控器
你可以在遠處使用它
也會對原本的記憶體產生作用
所以傳參照在函數裡改變
在主程式裡也會改變
作者: tsukai    時間: 2009-5-6 12:07 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: tcy_tcy    時間: 2009-5-6 11:30 PM

簡單來說
call by value : 傳值不傳址,也就是不論你如何改變這個值也不影響原來的變數(不同位址)
call by address : 傳址,也就是你的任何改變是對這個address裡面存的數值做變動,所以會影響原來的變數(因為都指向同一個address),而裡面的指標變數可以指向其他位址
call by reference : 同call by address,唯一差異在於這種方式傳入的指標變數不可再次指向其他address,但是call by address可以
作者: camby7s    時間: 2009-5-9 02:02 AM

三種其實是一樣的東西
只是在傳入的參數不一樣
Call by value: Copy傳入參數的值,Function結束Pop Stack就Free掉了,就好像你把作業影印一份給小明,就算他在上面寫林老師XX你原版的作業也不會改變。
Call by address:傳入參數是一個記憶體位置,改變記憶體位置內的值就等於改變了你原來的變數的值,就好像你跟小明說你的作業放在你抽屜自己拿,結果小明在你作業上面寫林老師XX,林老師就真的給你XX了
Call by reference:其實跟Call by address一樣,只是這次你直接把作業交給小明只是騙她說作業不是你的,他在上面寫林老師XX你交作業的時候林老師還是滿臉XX
作者: k0184990    時間: 2009-6-5 12:28 AM

提示: 作者被禁止或刪除 內容自動屏蔽




歡迎光臨 伊莉討論區 (http://www.wahas.com/) Powered by Discuz!