伊莉討論區's Archiver

copyright


頁: [1]

紫羽翔 發表於 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

[i=s] 本帖最後由 tsukai 於 2009-5-6 12:16 PM 編輯 [/i]

call by value就是你傳值進去時,它會複製一份,比如說你手上有個單機遊戲存檔,你複製了一份給你的朋友,你朋友在他電腦上玩了之後把存檔覆蓋掉,但這並不會影響你電腦中的存檔。

call by reference就是幫你傳進去的變數取一個暱稱,比如說你有個朋友王小明,他暱稱叫大頭,某天王小明被車撞了,就代表大頭也被車撞了,因為大頭就是王小明,他們是同一個人。

call by address就是你傳地址進去,比如說,你知道王小明的msn是[email=HitByCar@iamflying.com]HitByCar@iamflying.com[/email],所以你可以在msn上跟他對話,現在你有另一個朋友想認識王小明,你就把王小明的msn帳號丟給他,那麼他就可以透過msn跟王小明對話了。

以上如果看不是很懂,請看以下:

tcy_tcy 發表於 2009-5-6 11:30 PM

簡單來說
call by value : 傳值不傳址,也就是不論你如何改變這個值也不影響原來的變數(不同位址)
call by address : 傳址,也就是你的任何改變是對這個address裡面存的數值做變動,所以會影響原來的變數(因為都指向同一個address),而裡面的指標變數可以指向其他位址

camby7s 發表於 2009-5-9 02:02 AM

三種其實是一樣的東西
只是在傳入的參數不一樣
Call by value: Copy傳入參數的值,Function結束Pop Stack就Free掉了,就好像你把作業影印一份給小明,就算他在上面寫林老師XX你原版的作業也不會改變。
Call by address:傳入參數是一個記憶體位置,改變記憶體位置內的值就等於改變了你原來的變數的值,就好像你跟小明說你的作業放在你抽屜自己拿,結果小明在你作業上面寫林老師XX,林老師就真的給你XX了

k0184990 發表於 2009-6-5 12:28 AM

基本上call

頁: [1]

Powered by Discuz! Archiver 7.1  © 2001-2009 Comsenz Inc.