返回數組指針的函數


首先,數組不能被拷貝,所以函數不能返回數組,但可以返回數組的指針或引用,返回數組的指針有一下幾種方式:

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;
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM