作者VictorTom (鬼翼&娃娃鱼)
看板C_and_CPP
标题Re: [问题] 双重指标
时间Thu Feb 19 12:37:47 2009
直接回文好了, 小弟我几年前所学的Programing Language....
(不是C/C++程式设计这种课程, 我们翻语言结构, 其他学校怎称呼不晓得)
C语言: 只有Call by Value.
C++: 有Call by Value和Call by Reference.
其中Call by Reference因其特性又称为Call by Address.
====
Ex1:
/* 这个swap没有实质的swap能力我知道, 这是一个Call by Value的ex */
void swap1(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
main function里:
.... swap1(num1, num2); ....
Ex2:
/* 这个swap是C语言常见的swap实作, 问题是这还是Call by Value.
它是把int *的"Value"传入swap2; 把这种称作Call by Address,
Google大略查到的是不晓得哪一本C/C++的书作者自己这样叫的. */
void swap2(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
main function里:
.... swap2(&num1, &num2); ....
Ex3:
// 这个是小弟所认知的Call by Reference应该有的作法.
// 因为swap3实际pass的东西, 所以又称为Call by Address.
void swap3(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
main function里:
.... swap3(
num1,
num2); ....
====
实务上C里我们早就用传pointer来做到上例类似swap3成功换num1/num2的行为....
也许在这里好像对C++来说我传int*也没差, 但是基本上这是Call by Value....
(把这个叫Call by Address不太对, 也容易和Programing Language上的定义混摇)
但是像Java这种表面上没有pointer的language应该就有差了吧....
而且观察swap3的code, compiler要处理的方式应该也不一样吧....
印象中其他语言还有Call by Name或其他Call by XXX的, 不过早忘光了....
以上, 小弟当初所学是这样, 不晓得有没有记错, 或程式语言有演进改变的@_@"
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.66.243.96
※ 编辑: VictorTom 来自: 61.66.243.96 (02/19 12:40)
2F:→ windincloud:再看看你写的2&3 就会发现那边不一样了~ :) 02/19 13:11
3F:→ VictorTom:个人倾向不要用Call by Address这种会让人搞混的称呼. 02/19 13:31
4F:→ VictorTom:小弟当初修课就是花好久时间才把想法改转换了过来.... 02/19 13:31
6F:→ VictorTom:functions2.html 要和上面接起来, CbV, 和CbR的说明. 02/19 13:33
7F:→ VictorTom:一定要把C语言传address的方式叫Call by Address的话. 02/19 13:33
9F:→ VictorTom:cc-pointer-reference.html 也是要接起来... 02/19 13:33
10F:→ VictorTom:小弟觉得上面这个网站的红字部份说明的很清楚:) 02/19 13:34
12F:→ VictorTom:上面这个大约就是小弟当初所学的, 当然document不同就是 02/19 13:47
--
不好意思改一下, 小弟後来找到这篇应该是最能解释小弟要说的东西....
http://www.programmer-club.com/pc2020v5/forum/showSameTitleN.asp?board_pc2020=c&id=36833&keyword=
请看 : sflam(Raymond) 的 Best Solution.
http://www.programmer-club.com/pc2020v5/forum/showSameTitleN.asp?
board_pc2020=c&id=36833&keyword=
如果第一个Link太常不能存取, 请把上面两行接起来....
不好意思小弟不习惯缩网址, 这样大家才容易知道资料来源:)
※ 编辑: VictorTom 来自: 61.66.243.96 (02/19 13:58)
13F:→ windincloud:简单的说 看的点不同 自然就会不同 02/19 14:08
14F:→ windincloud:从main() 跟sub()看 讲法就会不一样~ 02/19 14:08
15F:→ VictorTom:Agree; 不过小弟现在不敢用Call by Address这讲法就是:) 02/19 14:09
16F:推 stonehomelaa:老外没在讲call by address 听说这是台湾人自创的 02/19 20:17
17F:推 zlw:台湾写的中文书都这样教,就跟着这样念啦 02/19 20:56