猿问

函数中的返回数组

函数中的返回数组

我有一个数组int arr[5]传递给函数的fillarr(int arr[]):

int fillarr(int arr[]){
    for(...);
    return arr;}
  1. 如何返回数组?
  2. 我将如何使用它,假设我返回了一个指针,我将如何访问它?


SMILET
浏览 502回答 3
3回答

神不在的星期二

在这种情况下,数组变量arr实际上,也可以通过隐式转换将数组块的开始作为指针处理。您使用的这个语法:int&nbsp;fillarr(int&nbsp;arr[])只是句法上的糖。你真的可以用这个代替它,它仍然有效:int&nbsp;fillarr(int*&nbsp;arr)因此,在同样的意义上,您想从函数返回的实际上是指向数组中第一个元素的指针:int*&nbsp;fillarr(int&nbsp;arr[])您仍然可以像普通数组一样使用它:int&nbsp;main(){ &nbsp;&nbsp;int&nbsp;y[10]; &nbsp;&nbsp;int&nbsp;*a&nbsp;=&nbsp;fillarr(y); &nbsp;&nbsp;cout&nbsp;<<&nbsp;a[0]&nbsp;<<&nbsp;endl;}

梦里花落0921

C+函数不能按值返回C样式数组.最接近的事情是返回一个指针。此外,参数列表中的数组类型被简单地转换为指针。int&nbsp;*fillarr(&nbsp;int&nbsp;arr[]&nbsp;)&nbsp;{&nbsp;//&nbsp;arr&nbsp;"decays"&nbsp;to&nbsp;type&nbsp;int&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;arr;}您可以通过为参数和返回使用数组引用来改进它,这可以防止衰变:int&nbsp;(&nbsp;&fillarr(&nbsp;int&nbsp;(&arr)[5]&nbsp;)&nbsp;)[5]&nbsp;{&nbsp;//&nbsp;no&nbsp;decay;&nbsp;argument&nbsp;must&nbsp;be&nbsp;size&nbsp;5 &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;arr;}对于Boost或C+11,按引用传递只能是可选的,语法也不那么费心:array<&nbsp;int,&nbsp;5&nbsp;>&nbsp;&fillarr(&nbsp;array<&nbsp;int,&nbsp;5&nbsp;>&nbsp;&arr&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;arr;&nbsp;//&nbsp;"array"&nbsp;being&nbsp;boost::array&nbsp;or&nbsp;std::array}这个array模板只生成一个struct包含一个C样式的数组,这样您就可以应用面向对象的语义,同时保持数组最初的简单性。

扬帆大鱼

8.3.5/8州-“函数不具有类型数组或函数的返回类型,尽管它们可能具有类型指针的返回类型或对这类事物的引用。函数不应该有数组,尽管可以有指向函数的指针数组。”int&nbsp;(&fn1(int&nbsp;(&arr)[5]))[5]{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;declare&nbsp;fn1&nbsp;as&nbsp;returning&nbsp;refernce&nbsp;to&nbsp;array &nbsp;&nbsp;&nbsp;return&nbsp;arr;}int&nbsp;*fn2(int&nbsp;arr[]){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;declare&nbsp;fn2&nbsp;as&nbsp;returning&nbsp;pointer&nbsp;to&nbsp;array &nbsp;&nbsp;&nbsp;return&nbsp;arr;}int&nbsp;main(){ &nbsp;&nbsp;&nbsp;int&nbsp;buf[5]; &nbsp;&nbsp;&nbsp;fn1(buf); &nbsp;&nbsp;&nbsp;fn2(buf);}
随时随地看视频慕课网APP
我要回答