您的位置:首页 > 编程语言 > C语言/C++

C++给函数传数组参数

2016-04-15 23:14 375 查看
from:
http://blog.csdn.net/hongjiqin/article/details/5739935
在C++中,如果要给一个函数传入一个数组,一般都是传入两个参数一个数组指针和一个数组大小

例:

void print_1 (int n, int *datas )

{

for (int i = 0; i < n; ++i)

{

std::cout << datas[i] << " ";

}

std::cout << std::endl;

}

对这个函数,我们可以这样使用它:

const int N = 3;

int datas
= {1, 2, 3};

print_1 (N, datas);

不过对这个函数,我们可能会传错 n 的大小,而在运行时可能出错,例如这样使用:

const int N = 3;

int datas
= {1, 2, 3};

print_1 (4 ,
datas);

有些时候,我们希望某函数只接受指定大小的数组,例如我们希望只接受大小为 3 的数组:

void print_2 (int datas[3] )

{

for (int i = 0; i < 3 ;
++i)

{

std::cout << datas[i] << " ";

}

std::cout << std::endl;

}

但实际上,上面的函数不能正确工作:

const int N = 3;

int datas
= {1, 2, 3};

print_2 (datas);

int datas2[N - 1] = {1, 2};

print_2 (datas2);

也就是我们传入了一个大小为 2 的数组,编译器没报任何错误,我们的函数接口 print_2 (int datas[3 ])
中的 3 没起任何作用

事实上,上面的函数接口应该这样写:

void print_3 (int (&datas) [3])

{

for (int i = 0; i < 3; ++i)

{

std::cout << datas[i] << " ";

}

std::cout << std::endl;

}

这时,我们如果这样使用是正确的

const int N = 3;

int datas
= {1, 2, 3};

print_3 (datas);

而我们如果这样使用,编译器会报错

int datas2[N - 1] = {1, 2};

print_3 (datas2);

在上面这个例子(print_3)的基础上,我们可以使用模板进行泛型实现

template<int N>

void print_4 (int (&datas)
)

{

for (int i = 0; i < N; ++i)

{

std::cout << datas[i] << " ";

}

std::cout << std::endl;

}

这时候,我们可以传递任意大小数组,而不担心给函数传入了错误的参数

const int N = 3;

int datas
= {1, 2, 3};

print_4 (datas);

int datas2[N - 1] = {1, 2};

print_4 (datas2);

假如我们给传了错误参数,函数将会报错

const int N = 3;

int datas
= {1, 2, 3};

print_4<4 >
(datas);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: