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问题解决掉,应该就不成问题了。
网友评论