作者ntpuisbest (阿龙)
看板Programming
标题[问题] reference
时间Wed Jul 11 10:05:13 2018
刚学CPP
看书看到reference 必须初始化值
所以比如说
int a=5;
int & ref.a=a;
这样是正确的
但是以下会是错误的
int a=5;
int & ref.a;
ref.a=a;
但是下面这样却会是可以用的?
void swap(int &a, int &b){
int tmp = a;
a = b;
b = a;
}
我的理解是上述的程式码
代表a是一个reference
但是我并没有给a一个值马上指定阿
为何这样可以work?
还有一直不懂 为何要在程式码前加一个void
我知道是指有没有回传值
而没有回传值 是要怎麽WORK啦
抱歉问题真的很LOW
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.114.237.189
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1531274716.A.AAE.html
1F:→ MOONRAKER: 没错超low 220.135.118.23 07/11 10:39
2F:→ MOONRAKER: 只有main才一定要有回传值 220.135.118.23 07/11 10:40
3F:→ MOONRAKER: 其他自己写的函数回不回传,没人管你 220.135.118.23 07/11 10:40
4F:→ MOONRAKER: 第一个问题你就想函数参数跟变数宣告 220.135.118.23 07/11 10:41
5F:→ MOONRAKER: 是两回事就好了 其他你长大就会懂了 220.135.118.23 07/11 10:41
6F:推 CoNsTaR: 是先学了函数式才来碰 imperative 吗 142.116.62.232 07/11 12:18
7F:推 CoNsTaR: 是的话 void 函数就当做是 IO () side ef 142.116.62.232 07/11 12:20
8F:→ CoNsTaR: fects 就好了 142.116.62.232 07/11 12:20
9F:→ CoNsTaR: 第一个问题因为你宣告的ref有可能没初始 142.116.62.232 07/11 12:26
10F:→ CoNsTaR: 化就拿来用所以要规定必须在宣告的时候 142.116.62.232 07/11 12:26
11F:→ CoNsTaR: 初始化 142.116.62.232 07/11 12:26
12F:→ CoNsTaR: 然而函数不可能参数没给齐就呼叫,所以可 142.116.62.232 07/11 12:26
13F:→ CoNsTaR: 以确定每个参数一定都会被初始化到 142.116.62.232 07/11 12:26
14F:推 miyi0630: 想成大家都有work,只是非void的函式work 117.19.160.181 07/17 05:10
15F:→ miyi0630: 完会丢一个值出来 117.19.160.181 07/17 05:10
16F:→ miyi0630: 你提的函式是把目的位置的值交换了,但 117.19.160.181 07/17 05:16
17F:→ miyi0630: 它并没有「多」丢一个值出来XD 换个方 117.19.160.181 07/17 05:16
18F:→ miyi0630: 式说,如果你在这个函式前加上型别,你 117.19.160.181 07/17 05:16
19F:→ miyi0630: 是希望他回传什麽东西出来0.0? 如果你 117.19.160.181 07/17 05:16
20F:→ miyi0630: 希望他传「这个东西」回来,就要多加一 117.19.160.181 07/17 05:16
21F:→ miyi0630: 句return,就是这样而已。 117.19.160.181 07/17 05:16
22F:→ miyi0630: 你的问题很好,这个观念挺重要的。只是 117.19.160.181 07/17 05:19
23F:→ miyi0630: 可能误会了回传的意思,这个回传跟运不 117.19.160.181 07/17 05:19
24F:→ miyi0630: 运行没有甚麽特别的关系,就只是额外丢 117.19.160.181 07/17 05:19
25F:→ miyi0630: 一个值出来而已。 117.19.160.181 07/17 05:19
26F:→ miyi0630: 举个例,有个函式F(a,b)会把a+b相加,如 117.19.160.181 07/17 05:30
27F:→ miyi0630: 果直接void,他还是会运行,但运行完之 117.19.160.181 07/17 05:30
28F:→ miyi0630: 後你也没有拿到什麽;但如果用指定c=F(a 117.19.160.181 07/17 05:30
29F:→ miyi0630: ,b) ,那它就会把算完的总和丢给c。 而要 117.19.160.181 07/17 05:30
30F:→ miyi0630: 求他丢回就要用return, 前面的型别则表 117.19.160.181 07/17 05:30
31F:→ miyi0630: 示丢出来的值会是int。 因为同样一个函 117.19.160.181 07/17 05:30
32F:→ miyi0630: 式可以丢很多不同型态的资料出来(你也可 117.19.160.181 07/17 05:30
33F:→ miyi0630: 以要求F不论如何都丢数值5出来……), 117.19.160.181 07/17 05:30
34F:→ miyi0630: 所以前面的型别只是在区分你希望他丢出 117.19.160.181 07/17 05:30
35F:→ miyi0630: 来的是什麽类型的资料而已,与运行无关 117.19.160.181 07/17 05:30
36F:→ miyi0630: 。 117.19.160.181 07/17 05:30
39F:→ miyi0630: 表演给你看 : 3 117.19.160.181 07/17 05:34
40F:→ miyi0630: 函式前面的回传型别只与return有关,不 117.19.160.181 07/17 05:36
41F:→ miyi0630: 是你想得那种回传>< 117.19.160.181 07/17 05:36
42F:→ ntpuisbest: 谢谢大大 61.61.12.16 07/25 11:11