精华内容
下载资源
问答
  • c++ 函数返回数组

    千次阅读 2018-01-04 11:12:35
    C++中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。 不能直接返回函数中定义的数组,会被释放掉 float* add(a[3],b[3]) { float sum[4]; sum[0]=a[0]+b[0]; sum[1]=

    以下转自:http://blog.csdn.net/lijiayu2015/article/details/52821562

    C++中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。

    不能直接返回函数中定义的数组,会被释放掉

    float* add(a[3],b[3])
    {
    float sum[4];
    sum[0]=a[0]+b[0];
    sum[1]=a[1]+b[1];
    sum[2]=a[2]+b[2];
    return sum;
    }
    
    //main()中调用使用
    int main()
    {
        float A[3] = { 1, 1, 1};
        float B[3] = { 1, 2,3};
        float *M = add(A, B);
        cout << M[0] << " " << M[1] << "  "<<M[2]<<endl;
        cout << M[0] << " " << M[1] << "  " << M[2] << endl;
        system("pause");
        return 0;
    }
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    运行结果
    第一次输出的结果正确,第二次输出结果不对,因为指针函数返回的指针被释放了。

    正确方法1:函数内使用new动态分配内存

    float* add(float a[3], float b[3])
    {
        float* sum=new float[3];//替换
        sum[0] = a[0] + b[0];
        sum[1] = a[1] + b[1];
        sum[2] = a[2] + b[2];
        return sum;
    }
    
    int main()
    {
        float A[3] = { 1, 1, 1};
        float B[3] = { 1, 2,3};
        float *M = add(A, B);
        cout << M[0] << " " << M[1] << "  "<<M[2]<<endl;
        cout << M[0] << " " << M[1] << "  " << M[2] << endl;
        delete[] M;//增加
        system("pause");
        return 0;
    }
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    输出结果正确。

    方法2:在函数外定义数组,通过形参传入函数,在函数内修改数组

    void add(float a[3], float b[3],float sum[3])
    {
        sum[0] = a[0] + b[0];
        sum[1] = a[1] + b[1];
        sum[2] = a[2] + b[2];
    }
    
    int main()
    {
        float A[3] = { 1, 1, 1};
        float B[3] = { 1, 2,3};
        float M[3];
        add(A, B, M);
        cout << M[0] << " " << M[1] << "  "<<M[2]<<endl;
        cout << M[0] << " " << M[1] << "  " << M[2] << endl;
        system("pause");
        return 0;
    }
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    输出结果正确

    以上转自:http://blog.csdn.net/lijiayu2015/article/details/52821562


    踩了坑之后,正确用法:


    调用:



    finish!

    展开全文
  • C++ 函数返回数组

    千次阅读 2019-05-30 11:00:05
    //在堆区开辟空间存放数组(若是在栈区存放数组,随着函数结束,数组名指向的地址存放的内容也会被系统释放,而堆上的空间是由程序员自动给予分配和释放的) int *p = malloc(COUNT * sizeof(int)); //static int p...
    int* getNewArray(){
        
        //在堆区开辟空间存放数组(若是在栈区存放数组,随着函数结束,数组名指向的地址存放的内容也会被系统释放,而堆上的空间是由程序员自动给予分配和释放的)
        int *p = malloc(COUNT * sizeof(int));
        
        //static int p[COUNT] = {0}; //或者采用static定义指针变量 (在数组p[COUNT]前面加入了static关键字,它就使得p[COUNT]存放在内存中的静态存储区中,所占用的存储单元不释放直到整个程序运行结束)
        
        for (int i = 0; i < COUNT; i++)
       {
            p[i] = arc4random()%101;
            printf("%d ", p[i]);
        }
     
        printf("\n");
        
        for (int i = 0; i < COUNT - 1; i++) 
        {
            for (int j = 0; j < COUNT - i - 1; j++)
            {
                if (p[j] > p[j+1])
                {
                    int temp = p[j];
                    p[j] = p[j+1];
                    p[j+1] = temp;
                }
            }
        }
        
        return p;
     
    }
    
    int main(int argc, const char * argv[])
      {
        
        
        int *p = NULL; //定义与封装函数返回值类型相同的指针变量,来接收返回地址
        
        p = getNewArray();
        
        //打印排序后的函数
        for (int i = 0; i < COUNT; i++) 
       {
            printf("%d ", p[i]);
        }
        return 0;
    }
    

     需要动态申请的啊,堆栈上面的数组是不能直接返回的会在函数退出的时候销毁掉

    展开全文
  • c++函数返回数组

    千次阅读 2013-05-04 21:51:01
    涉及到返回数组。。回来后查了查资料总结如下。 不能返回局部数组,因为它是临时变量,暂存在栈区里面,函数调用结束,数组会被释放。 如果需要返回数组可以用如下3种方法: (1)调用之前先创建数组,将数组的...

    前两天应聘,做了些笔试题。遇到返回值的问题。。涉及到返回数组。。回来后查了查资料总结如下。

    不能返回局部数组,因为它是临时变量,暂存在栈区里面,函数调用结束,数组会被释放。

    如果需要返回数组可以用如下3种方法:

    (1)调用之前先创建数组,将数组的地址也就是指针作为参数传递进函数。

    int *GetData(String S,int& arr[])
    {
     int j=0; 
     for(int i=1;i<S.Length();i++)
     {
        if(S.SubString(i,1)==".")
        {
          arr[j]=i;
          j++;
         }
     }
     return arr;//反不返回都行,可以直接使用参数
    }

    (2)在函数中定义静态数组

    #define MAX 1024
    char * getInfo(){
    static char info[MAX];
    ……
    Your code
    ……
    return info;
    }

    (3)函数中定义数组指针,然后对指针进行分配空间,此时的内存空间是在堆区(注意要自行释放)

    #define MAX 1024
    char *getInfo(){
    char *info;
    info=(char *)malloc(MAX*sizeof(char));
    ……
    Your code
    ……
    return info;
    }

    另外:

    局部对象可以返回
      因为C++中使用临时复制对象来传值的缘故.例如: 局部string Str 对象,return Str;时C++会用一个临时复制对象来保存Str的值,接着Str的生存期结束,然后临时对象的值被赋给调用处,最后临时复制对象的生存期结束,通过汇编代码会看到返回的时候会再构造一个对象,最后析构2次,但是第二次析构的时候临时对象已经复制到调用处了。

    004518E8  call        dword ptr [__imp_std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > (47E7F0h)] 
    004518EE  cmp         esi,esp 
    004518F0  call        @ILT+4760(__RTC_CheckEsp) (42529Dh) 
    004518F5  mov         ecx,dword ptr [ebp-118h] 
    004518FB  or          ecx,1 
    004518FE  mov         dword ptr [ebp-118h],ecx 
    00451904  mov         byte ptr [ebp-4],1 
    00451908  mov         esi,esp 
    0045190A  lea         ecx,[ebp-4Ch] 
    0045190D  call        dword ptr [__imp_std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> > (47E7CCh)] 
    00451913  cmp         esi,esp 
    00451915  call        @ILT+4760(__RTC_CheckEsp) (42529Dh) 
    0045191A  mov         byte ptr [ebp-4],0 
    0045191E  mov         esi,esp 
    00451920  lea         ecx,[ebp+0Ch] 
    00451923  call        dword ptr[__imp_std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>::~basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >(47E79Ch)]


    展开全文
  • 关于函数返回数组以及数组的定义的一些记录

    一般来说C++中函数返回数组的形式是这样的:

    int* test(int T[]){
        int *resu=new int[2];
        //int resu[2];
        resu[0]=12;
        resu[1]=194;
        cout<<"T 的长度是:"<<sizeof(T)/sizeof(int)<<endl;
        return resu;
    }
    
    int main()
    {
        int R[]={1,3,5,6,9};
        int *rest;
        cout<<"R 的长度是:"<<sizeof(R)/sizeof(int)<<endl;
        rest = test(R);
        delete rest;
        return 0;
    }

    输出结果是:

    R 的长度是:5
    T 的长度是:1
    12  194

    有两点需要注意:
    1,在函数中数组名只是一个指针,因此sizeof(T)==4.
    2,在函数中定义返回数组时,需要给数组分配内存空间:int *resu=new int[2]。只是单纯的定义一个数组:int resu[2],是不可行的,因为这样的数组的内存会在函数调用之后丢失。
    当然最后别忘记将新建的变量delete掉。

    展开全文
  • C++ 函数返回数组处理方法

    千次阅读 2020-12-22 14:31:24
    最近在通过函数返回数组时踩到了一些坑,在此记录一下。 首先C++函数的返回类型没有“数组”这一结构,因此一般情况下我们会采用指针去接受数组的首地址来进行返回。另外由于函数体内定义的变量均为局部变量,局部...
  • 函数不能返回数组,但是可以返回数组指针或引用,也可以通过返回指针来实现。 使用类型别名的好处是:你可以用这个类型别名定义变量,变量的元素个数与你返回的数组元素个数相等,访问时可以避免越界问题。
  • C/C++中想要一个函数返回数组,此类问题,应用场景往往为了解决函数间相互通信,比如某个函数内处理的完的结果数据需要交接给另一个函数的情况,方法大概有三种:(例如在函数func中对a[]数组进行赋值,之后可以再对...
  • c/c++函数返回数组

    千次阅读 2016-12-17 17:58:39
    c++函数如何返回一个数组调用某个函数时经常需要函数返回一个值,我们都知道c++ 的函数返回的是一个copy,所以当只返回一个值时不会出现什么问题,直接return一个copy就行了,但是如果返回一个数组,事情就变得有趣...
  • 数组指针问题一直是C/C++语言初学者的头疼问题,这里图图和大家分享一下函数返回数组的问题。如果在函数里定义静态数组,那么函数结束时数组内存空间也就会被释放,这时候如果返回数组首地址的话,那么获得的指针将...
  • 主要介绍了C++函数返回数组的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • c++如何从函数返回数组C++函数返回数组 C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。 如果您想要从函数返回一个一维数组,您必须声明一个...
  • c++函数返回数组

    2016-11-19 12:56:16
    c++不允许返回一个完整的数组作为...如果用户想要从函数返回一个一维数组,用户必须声明一个返回指针的函数,如下: int * myFunction() { } 另外,c++不支持在函数外返回局部变量的地址,除非定义局部变量为static变量
  • C++使函数返回数组

    2015-10-04 21:22:16
    ps:由于博主一直以来用的都是php,所以使用函数返回数组感觉很方便,最近刷题的时候,总是想着返回数组。另外吐槽,oj上的刷题系统的格式问题真是奇葩!一会要输出空格,一会不要空格,博主几乎崩溃。解几个水题爆炸...
  • C++函数返回数组

    2018-11-09 20:45:42
    如果想要从函数返回一个一维数组,就必须声明一个返回指针的函数,如下: int * myFunction() { . . . } 另外,C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 下面的函数会生成 10...
  • C++中函数是不能直接返回一个数组的,但是数组其实是指针,所以可以让函数返回指针来实现。比如一个矩阵相乘的函数,很容易地我们写成: 1 #include 2 3 using namespace std; 4 5 void MultMatrix(float M[4]...
  • 因为数组不能被拷贝, 所以函数不能返回数组. 不过, 函数可以返回数组的指针或引用. 声明一个返回数组指针的函数 Type (*function(parameter_list))[dimension] int (*func(int i))[10]; func(int i) 表示调用 func...
  • C++中如何使函数返回数组

    万次阅读 2016-05-18 16:17:51
    C++中如何使函数返回数组?以前使用java返回数组这些类型都比较方便,用c++的时候突然发现c++不支持返回数组,我就找了下应该怎么实现这这种返回 在C++中,数组不是一种类型,因此不能被直接返回。一般有两种方法来...
  • C++ 定义返回数组函数

    千次阅读 2019-05-20 05:43:54
    最近遇到的一个问题是写C++的时候想要函数的返回值为一个数组,所以在定义函数返回值的类型的时候使用了指针。但是这时候返回的不能是在函数内部定义的数组首地址,因为这个地址在函数执行完成之后就会删除,导致...
  • c 语言 函数返回数组 介绍 (Introduction) In this tutorial, we are going to understand how we can return an array from a function in C++. 在本教程中,我们将了解如何从C ++中的函数返回数组 。 在C ++函数...
  • 因为数组不能被拷贝,所以函数不能返回数组。不过,函数可以返回数组的指针或引用。返回数组指针的方法有以下几种:  1、方法一:使用类型别名。如下  typedef int arrt[10]; //arrT是一个类型别名,它表示的类型...
  • c++ 如何让函数返回数组

    千次阅读 2019-01-28 12:40:34
    函数体内部创建的变量都是局部变量,当函数运行结束的时候,都会抛弃,也就是说你只返回了一个temp指针,这个指针确实是你想要的,这没有问题,但是它指向的内容在函数结束也就是return的那一刻之后就已经物是人非了...
  • C++函数传递和返回数组 C++函数传递数组 C++ 中您可以通过指定不带索引的数组名来传递一个指向数组的指针。 C++ 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。 如果您想要在函数中传递一个一...
  • c++返回数组函数

    2014-04-22 21:00:26
    C++中,是不可以直接返回一个数组的,一般把
  • C++】从函数返回数组

    千次阅读 2017-02-02 15:41:12
    如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下: int * myFunction(){...} 另外,C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 现在,让...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 254,519
精华内容 101,807
关键字:

c++函数返回数组

c++ 订阅