(原創) array可以使用reference方式傳進function嗎? (C/C++)
任何型態皆可用C++新提出的reference傳進function,array除了使用pointer方式傳進function外,當然也可以使用reference。
當使用pointer傳進function時,compiler只對array的型態做檢查,就算傳進function時指定了array size,compiler也會忽略,但若使用reference,compiler則會對array size做檢查。
1
/*
2
(C) OOMusou 2007 http://oomusou.cnblogs.com
3![](/Images/OutliningIndicators/InBlock.gif)
4
Filename : ArrayReferencePassToFunction.cpp
5
Compiler : Visual C++ 8.0 / ISO C++
6
Description : Demo how to use reference array pass to function
7
Release : 02/09/2007 1.0
8
*/
9![](/Images/OutliningIndicators/None.gif)
10
#include <iostream>
11![](/Images/OutliningIndicators/None.gif)
12
using namespace std;
13![](/Images/OutliningIndicators/None.gif)
14
void func(int (&arr)[3]) {
15
for(int i = 0; i != 3; ++i) {
16
cout << arr[i] << endl;
17
}
18
}
19![](/Images/OutliningIndicators/None.gif)
20
int main() {
21
int ia[] = {0, 1, 2};
22
func(ia);
23
}
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/InBlock.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
19
![](/Images/OutliningIndicators/None.gif)
20
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
21
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
14行int (&arr)[3],&arr一定要括號,因為[]比&優先權高。
int &arr[3] // 一個array有三個元素,每個元素為int型態的reference
int (&arr)[3] 三個int型態元素array的reference
雖然compiler能幫我們檢查array size看似不錯,但須將array size寫死,則減少了程式的彈性,若配合function template,則可處理任意size的array。
See Also
(原創) 如何使用function template傳遞array? (C/C++) (template)
Reference
C++ Primer 4th P.240