【C++】函式返回資料指標的多種定義方式

風塵_NULL發表於2017-07-28
三個函式,返回陣列指標,效果是一樣的
using arrT=int[10]
arrT
* functions(arrT* arrs,size_t a_size){
 int *p=(*arrs);
 for(int i=0;i<a_size;i++){
 std::cout<<i<<std::endl;</i<<std::endl;<>
 *p=i;
 p++;
 //(*arrs)++會報lvalue required as increment operand錯誤,因為(*arrs)不是一個左值
 //*(*arrs)=i;
 //(*arrs)++;

 }
 return arrs;

}
 //*functions1(int (*p)[10],size_t a_size)表示可以對函式呼叫結果解引用,
//(*functions1(int (*p)[10],size_t a_size))[10]表示解引用呼叫函式結果之後,得到一個大小為10的陣列


int (*functions1(int (*p)[10],size_t a_size))[10]{
 int *q=(*p);
 for(int i=0;i<a_size;i++){
 *q=i;
 q++;
 }
 return p;
}
//C++11標準
auto function2(int (*p)[10],size_t a_size)->int(*)[10]{
 int *q=(*p);
 for(int i=0;i<a_size;i++){
 *q=i;
 q++;
 }
 return p;

}

int main()
{
 int (*p)[10];
 int (*q)[10];
 int (*h)[10];
 int arrs[]={1,2,3,4,5,0,0,0,0,0};
 //不能是p=functions(arrs,10),因為是函式需要傳一個陣列指標而不是首地址指標
 p=functions(&arrs,10);
 q=functions1(&arrs,10);
 h=function2(&arrs,10);
 for(auto c:(*p)){
 std::cout<<c<<std::endl;</c<<
 }
 for(auto c:(*q)){
 std::cout<<c<<std::endl;</c<<

 }
 for(auto c:(*h)){
 std::cout<<c<<std::endl;</c<<

 }
}

</a_size;i++){<>
</a_size;i++){<>
</a_size;i++){<>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30221425/viewspace-2142728/,如需轉載,請註明出處,否則將追究法律責任。

相關文章