为了账号安全,请及时绑定邮箱和手机立即绑定

函数中的返回数组

函数中的返回数组

C++
SMILET 2019-06-28 09:56:14
函数中的返回数组我有一个数组int arr[5]传递给函数的fillarr(int arr[]):int fillarr(int arr[]){     for(...);     return arr;}如何返回数组?我将如何使用它,假设我返回了一个指针,我将如何访问它?
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

在这种情况下,数组变量arr实际上,也可以通过隐式转换将数组块的开始作为指针处理。您使用的这个语法:

int fillarr(int arr[])

只是句法上的糖。你真的可以用这个代替它,它仍然有效:

int fillarr(int* arr)

因此,在同样的意义上,您想从函数返回的实际上是指向数组中第一个元素的指针:

int* fillarr(int arr[])

您仍然可以像普通数组一样使用它:

int main(){
  int y[10];
  int *a = fillarr(y);
  cout << a[0] << endl;}


查看完整回答
反对 回复 2019-06-28
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

C+函数不能按值返回C样式数组.最接近的事情是返回一个指针。此外,参数列表中的数组类型被简单地转换为指针。

int *fillarr( int arr[] ) { // arr "decays" to type int *
    return arr;}

您可以通过为参数和返回使用数组引用来改进它,这可以防止衰变:

int ( &fillarr( int (&arr)[5] ) )[5] { // no decay; argument must be size 5
    return arr;}

对于Boost或C+11,按引用传递只能是可选的,语法也不那么费心:

array< int, 5 > &fillarr( array< int, 5 > &arr ) {
    return arr; // "array" being boost::array or std::array}

这个array模板只生成一个struct包含一个C样式的数组,这样您就可以应用面向对象的语义,同时保持数组最初的简单性。


查看完整回答
反对 回复 2019-06-28
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

8.3.5/8州-

“函数不具有类型数组或函数的返回类型,尽管它们可能具有类型指针的返回类型或对这类事物的引用。函数不应该有数组,尽管可以有指向函数的指针数组。”

int (&fn1(int (&arr)[5]))[5]{     // declare fn1 as returning refernce to array
   return arr;}int *fn2(int arr[]){              // declare fn2 as returning pointer to array
   return arr;}int main(){
   int buf[5];
   fn1(buf);
   fn2(buf);}


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 501 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信