Function returning a pointer to an int array

前端 未结 2 2008
长情又很酷
长情又很酷 2021-01-14 00:24

I am learning C++ from Primer 5th edition and I am at Returning a Pointer to an Array. The declaration of this function is:

 int (*func(int i))[10]; 
         


        
2条回答
  •  情歌与酒
    2021-01-14 01:19

    Read: What does sizeof(&array) return? to understand diffrence between array name and address of array.

    Q1 I want to know the difference between:  

    In your code:

      int *func(){
        static int a[]={1,2,3};
        return a;
      }
    

    you are returning address of first element. Actually type of a is int[3] that decays into int*. Important is
    You stores address into int* p and can assess elements of array as p[i].

    Whereas if your function would be int int (*func())[3] then you return &a, and assign to int(*p)[3] and can access (*p)[i].
    Note: type of &a is int(*)[3].

    Q2 How i can make this function call work, because in the book, there isn't any concrete example.

    like:

    int (*func())[3]{
        static int a[]={1,2,3};
        return &a;
    }
    

    And main():

    int main(){ 
     int i=0;    
     int(*p)[3] = func();
     for(i=0; i<3; i++)
       printf(" %d\n", (*p)[i]);
     return 0;
    }
    

    You can check second version of code working id Ideone

    Q1 I want to know the difference between:  

    As you are interested to know diffrence between two so now compare two different declarations of p in two versions of code:

    1) : int* p; and we access array elements as p[i] that is equals to *(p + i).

    2) : int (*p)[i] and we access array elements as (*p)[i] that is equals to *((*p) + i) or just = *(*p + i). ( I added () around *p to access array element because precedence of [] operator is higher then * So simple *p[i] means defense to the array elements).

    Edit:

    An addition information other then return type:

    In both kind of functions we returns address that is of a static variable (array), and a static object life is till program not terminates. So access the array outsize func() is not a problem.

    Consider if you returns address of simple array (or variable) that is not static (and dynamically allocated) then it introduce as Undefined behavior in your code that can crash.

提交回复
热议问题