C++的数组传参问题

0x001 开始

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

0x002 坑

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

0x003 原因

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

0x004 直接使用指针

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

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

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

0x006 可能的解决方法

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

你可能感兴趣的:(C++的数组传参问题)