码迷,mamicode.com
首页 > 编程语言 > 详细

数组作为函数参数传递

时间:2021-03-18 14:12:35      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:传递   lang   函数参数传递   cpp   sizeof   class   无法   strong   合规   

数组作为函数参数传递的时候,会退化为指针,并不能得到数组的大小

void test1(int a[])
{
    cout << sizeof(a) << endl;
}

int main() {
    int a[4];
    test1(a);
}

输出结果是指针的大小,并不是数组的大小

void test2(int a[4])
{
    cout << sizeof(a) << endl;
}
int main() {
    int a[4];
    test2(a);
}

这种情况,也是指针,虽然声明了是数组,但是由于值传递,还是先把a转成了指针,又传递的。

void test4(int(&a)[4])
{
    cout << sizeof(a) << endl;
}
int main() {
    int a[4];
    test4(a);
}

这种是可以的,但是限定了数组的大小,没有意义,如果把函数参数中数组大小4去掉,编译不过。

模板

template<size_t size>
void test5(int (&a)[size])
{
    cout << sizeof(a) << endl;
}
template<class T, size_t size>
void test6(T (&a)[size])
{
    cout << sizeof(a) << endl;
}

模板是可以获得大小的,并且是作为数组传递,要注意的是必须是数组的引用,如果直接是void test(T a[size]),模板是没有问题,但是传递数组的时候,模板无法展开,类型对应不上。

注意

为什么数组的引用是int (&a)[size],而不是int & a[size]呢?因为根据优先级组合规则,后面的会被认为是(int&)a[size]引用的数组,这个是非法的,所以需要括号明确a的类型为引用

数组作为函数参数传递

标签:传递   lang   函数参数传递   cpp   sizeof   class   无法   strong   合规   

原文地址:https://www.cnblogs.com/studywithallofyou/p/14549955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!