• 返回数组指针的函数


    首先,数组不能被拷贝,所以函数不能返回数组,但可以返回数组的指针或引用,返回数组的指针有一下几种方式:

    1.使用类型别名

    #include <iostream> 
    using namespace std;
    int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    typedef int type[10];           //或using type=int[10],type是类型别名
    type *sum(int(&a)[10])            
    {
        return &a;                //不能返回局部变量的指针或引用,所以函数形参采 &     
    }
    
    int main(int argc,char *argv[])
    {    
        int(*p)[10] = sum(b);
        int *a = *p;
        for (int i = 0; i < 10; i++)
            cout << *(a + i) << endl;;
        return 1;
    }

    2.直接定义  

    #include <iostream> 
     using namespace std;
    int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
     int(*sum(int(&a)[10]))[10]    //数组的维度放在最后
     {
         return &a;
     }
      
     int main(int argc,char *argv[])
     {    
         int(*p)[10] = sum(b);
         int *a = *p;
         for (int i = 0; i < 10; i++)
             cout << *a++<< endl;;
         return 1;
     }

    3.使用auto

    #include <iostream> 
    using namespace std;
    int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    auto sum(int(&a)[10])->int(*)[10]            //auto fun(形参列表)->int(*)[10],将真正的类型写后面
    {
        return &a;
    }
    
    int main(int argc,char *argv[])
    {    
        int(*p)[10] = sum(b);
        int *a = *p;
        for (int i = 0; i < 10; i++)
            cout << *a++<< endl;;
        return 1;
    }

    4.使用decltype

    #include <iostream> 
    using namespace std;
    int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    decltype(b) *sum(int(&a)[10])           //使用decltype
    {
        return &a;
    }
    
    int main(int argc,char *argv[])
    {    
        int(*p)[10] = sum(b);
        int *a = *p;
        for (int i = 0; i < 10; i++)
            cout << *a++<< endl;;
        return 1;
    }
     
  • 相关阅读:
    Transformation
    Yet Another Number Sequence
    Table
    K个联通块
    Acyclic Organic Compounds
    Sandy and Nuts
    tetrahedron
    BZOJ4750 密码安全
    实现商品秒杀 时间倒计时
    实现qq登录
  • 原文地址:https://www.cnblogs.com/mrlsx/p/5554278.html
Copyright © 2020-2023  润新知