64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string>
#include <vector>
using namespace std;
template <class T, size_t N>
size_t size( T (&arr)[N] ) // 为什么要用引用
{
return N;
}
template <class T, size_t N>
void printValues( const T (&arr)[N] ) // 为什么要用引用
{
for ( size_t i = 0; i != N; ++i )
{
cout << arr[ i ] << endl;
}
}
int main()
{
int a[] = { 1, 2, 3, 4 };
int length = size( a );
printValues( a );
return 0;
}
int arr[10][10];
f(arr); // 这样也能编译通过,f()参数的限制就不那么强力了。
void f(int (*arr)[10]);
int arr[10];
f(arr); // 编译器会报错。
f(&arr); //okay
[/quote]
你确信代码能编译通过?
void f(int (*arr)[10]);
int arr[10];
f(arr); // 编译器会报错。
f(&arr); //okay
void f(int arr[10]);
int arr[5];
f(arr); // 编译是能通过的。
void f(int (&arr)[10]);
int arr[5];
f(arr); // 编译器会报错。
无规定一定要用引用,用指向数组的指针一样可以,如下所示,只不过用引用可以在函数内部获得简洁清晰的语法结构:template< typename T, size_t N > void fun( T ( *p )[N] ) { std::cout << ( *p )[1] << std::endl; } int main() { int a[ 10 ] = { 100, 200, 300 }; double b[ ] = { 50.24, 60.32, 70.99 }; fun( &a ); fun( &b ); return 0; }
不是非要不可的,只是一种华而不实的做法,只是想保留数组的全部信息而已!