C++的数组传参问题

作者: wolf_hugo | 来源:发表于2019-08-19 17:22 被阅读0次

    0x001 开始

    本来想写一个工具函数库,其中包含一个获取数组长度的方法,很简单的sizeof(),但是踩到了坑。

    0x002 坑

    在main()函数中对赋值的数组直接调用这个函数得到的数据是正确的。而如果将数组直接以参数的方式传给调用的另外一个函数,并在此函数中获取数组的长度,程序计算出的数据只有整个数组的第一个元素的长度。

    0x003 原因

    原来c++中通过函数的参数的方法传送的数组数据,只包含该数组的首个元素(的地址),也就是说,在获取参数的函数看来,这个参数只有一个元素,而非一长串的数组。
    但是因为数据类型还是数组,我们直接通过下标操作数组的方法还是没有问题的。

    0x004 直接使用指针

    我们可以在定义函数时,在参数的类型名后面加上一个取地址符“&”(int function(string &a)),在调用函数时可以使用指针“*a”(function(*a))。现在我们可以在函数定义的位置下功夫了。
    在该函数中 cout<<a; 输出的是a数组的首地址,这里a代表的就是这个地址,cout<<*a; 输出的是数组的首个元素的数据,*a是一个指向数组首个元素的指针,因此我们使用a++即可将指针向下一个元素的地址。
    其实这个方法没有卵用,因为没有解决我的上述问题。
    函数定义:function(string &a){}
    函数调用:function(*a);

    0x005 不妨写一下传参的方法

    函数定义:function(string a[]){}
    函数调用:function(a);

    0x006 可能的解决方法

    传入数组(以上两种方法均可),再将数组长度传给调用的函数,也就是说,在调用的函数外面就将数组的size问题解决掉,应该就不成问题了。

    相关文章

      网友评论

        本文标题:C++的数组传参问题

        本文链接:https://www.haomeiwen.com/subject/uehesctx.html