[问题] pass by value or reference?

楼主: zzss2003 (brotherD)   2018-06-27 09:50:31
图: https://imgur.com/a/s2OAcCl
第二个strcpy,我怎么看都是pass by reference,怎么书上说的是by value?
但书上又说,因为是by value,所以可以随意改s跟t的值(想怎么用就怎么用)。这让我联
想到一个问题
如果擅自更改s跟t的值,下一次function call时传进来的值会被改掉吗?
比如第一次call function:
char * des;
char * src;
des = &arr1[0];
src = &arr2[0];
strcpy(src, des);
一开始的des与src都是指到arr1与arr2的头,但跑完while后t跟s都已经指到arr1与arr2的
尾巴了,下一次再call strcpy的话,是不是又要重新assign一次? i.e.
des = &arr1[0];
src = &arr2[0];
ps: 请问t[i]assign给s[i]后,是s[i]跟'\0'做comparison吗?
作者: sarafciel (Cattuz)   2018-06-27 10:00:00
你从char的角度看是是call by ref,char *的话就是call
作者: stupid0319 (征女友)   2018-06-27 10:00:00
我怎么看也都是pass by value
作者: sarafciel (Cattuz)   2018-06-27 10:01:00
by value没有错 外面的des跟src指到的东西会改 但是des跟src本身是call by value传进去 所以不会变*才
作者: loveflames (咕啾咕啾魔法阵)   2018-06-27 10:27:00
答对了
作者: sarafciel (Cattuz)   2018-06-27 10:30:00
&des跟&src的(X) des跟src的value(O)你想传&des跟&src的话 s跟t要宣告成char **
作者: loveflames (咕啾咕啾魔法阵)   2018-06-27 10:34:00
java的reference行为比较像C/C++的指标,以这角度来说是call by value,而C++ reference是真正意义的call
作者: sarafciel (Cattuz)   2018-06-27 10:35:00
改成这样的话就会是你内文后段说的行为
作者: loveflames (咕啾咕啾魔法阵)   2018-06-27 10:35:00
by reference,不过底层实作也是用指标
作者: MOONRAKER (㊣牛鹤鳗毛人)   2018-06-27 11:43:00
看到参数前面有&才是pass by ref 而那是C++C是没有pass by ref的
作者: tinlans ( )   2018-06-27 12:34:00
这类名词只是 syntax sugar 层级上的诠释,换句话说不那么甜美还要多劳动你的就不会是 by ref。你看不清楚的话,先 typedef char *CharPtr,然后把全部的 char * 换成 CharPtr 就会懂了。指标型别,充其量也只是变量的一种型别,就只是这样。在语言结构上,int 和 char * 都仅仅是一个型别而已。
作者: uranusjr (←這人是超級笨蛋)   2018-06-27 18:09:00
Java 的 reference 其实是个彻头彻尾的 pointer, 根本不是理论意义上的参考, 一切都是个假象

Links booklink

Contact Us: admin [ a t ] ucptt.com