数组引用和数组指针和两种非常优美而又用途广泛的语言设施,但很多其名气不是很大,因为这两设施C++中新引入的,大家一般不怎么注意的.
下面通过一小段代码,来展示其用法.
#include
<
iostream
>
using namespace std;
template < class T, int size >
T _min(T ( & r_a)[size]) // 函数模板的形参是数组引用
... {
T min_val = r_a[0];
for (int i = 1; i < size; ++i)
if (min_val > r_a[i]) min_val = r_a[i];
for (int i = 0; i < size; ++i)
r_a[i] = 1;
return min_val;
}
template < class T, int size >
T _min(T ( & p_a)[size]) // 函数模板的形参是数组指针
... {
T min_val = (*p_a)[0];
for (int i = 1; i < size; ++i)
if (min_val > (*p_a)[i]) min_val = (*p_a)[i];
for (int i = 0; i < size; ++i)
(*p_a)[i] = 1;
return min_val;
}
int main()
... {
int a[] = ...{2,3,5,3,67,123,4};
double b[] = ...{2.1, 4.23, 56.32, 2.0, 1.2};
int (&ria)[5] = a; // 定义数组引用
double (*pda)[5] = &b; // 定义数组指针
for (int i = 0; i < 5; ++i)
cout << ria[i] << " "; // 使用数组引用
cout << " ";
for (int i = 0; i < 5; ++i) ...{
cout << (*pda)[i] << " "; // 数组指针
cout << " ";
cout << _min(a) << " "; // 数组引用作为函数的实参
cout << _min(&b) << " "; // 数组指针作为函数的实参
system("pause");
return 0;
}
using namespace std;
template < class T, int size >
T _min(T ( & r_a)[size]) // 函数模板的形参是数组引用
... {
T min_val = r_a[0];
for (int i = 1; i < size; ++i)
if (min_val > r_a[i]) min_val = r_a[i];
for (int i = 0; i < size; ++i)
r_a[i] = 1;
return min_val;
}
template < class T, int size >
T _min(T ( & p_a)[size]) // 函数模板的形参是数组指针
... {
T min_val = (*p_a)[0];
for (int i = 1; i < size; ++i)
if (min_val > (*p_a)[i]) min_val = (*p_a)[i];
for (int i = 0; i < size; ++i)
(*p_a)[i] = 1;
return min_val;
}
int main()
... {
int a[] = ...{2,3,5,3,67,123,4};
double b[] = ...{2.1, 4.23, 56.32, 2.0, 1.2};
int (&ria)[5] = a; // 定义数组引用
double (*pda)[5] = &b; // 定义数组指针
for (int i = 0; i < 5; ++i)
cout << ria[i] << " "; // 使用数组引用
cout << " ";
for (int i = 0; i < 5; ++i) ...{
cout << (*pda)[i] << " "; // 数组指针
cout << " ";
cout << _min(a) << " "; // 数组引用作为函数的实参
cout << _min(&b) << " "; // 数组指针作为函数的实参
system("pause");
return 0;
}