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++的数组传参问题

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

  • Linux内核模块传参

    数据类型变量的传参 数组类型传参 实例

  • Java 4

    可变参数 JDK中具有可变参数的类Arrays.asList()方法。 分别传多个参、传数组,传数组又传参的情况。...

  • go语言陷阱之十一:数组作为函数参数

    这是C/C++里面的常见问题了,数组作为函数参数时是传值还是传引用, 代码example: 本意是想更新数组x,但...

  • lc25 关于链表

    复习知识点:1)链表反转2)关于指针。理解C++中指针传参,大概指针传参也是传的形参(like int数字),但是...

  • vector 作为函数参数

    参考 C++(笔记)容器(vector)作为函数参数如何传参 vector作为参数的三种传参方式

  • 函数与数组

    函数的传参 可变参(不定参)arguments 参数的个数可变,参数数组 1.增加(改变数组内容) push() ...

  • C++中传递数组给函数和函数返回指向数组的指针

    记录一: C++ 中可以通过指定 “不带索引的数组名” 来传递一个指向数组的指针。 C++ 传数组给一个函数,数组...

  • Vue与Element走过的坑。。。。带上Axios

    1.Axios中post传参数组(java后端接收数组) 虽然源数据本身就是数组,但是传参时会自动变成key:数值...

  • ajax数组传参

    作为一名前端coder,用的最多的请求就是ajax请求了。或许你用的其他框架,但是从原生js到jquery,aja...

网友评论

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

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