C pass int array pointer as parameter into a function

前端 未结 9 1419
借酒劲吻你
借酒劲吻你 2020-12-08 04:39

I want to pass the B int array pointer into func function and be able to change it from there and then view the changes in main function

#include 

        
相关标签:
9条回答
  • 2020-12-08 05:25
    main()
    {
        int *arr[5];
        int i=31, j=5, k=19, l=71, m;
    
        arr[0]=&i;
        arr[1]=&j;
        arr[2]=&k;
        arr[3]=&l;
        arr[4]=&m;
    
        for(m=0; m<=4; m++)
        {
            printf("%d",*(arr[m]));
        }
        return 0;
    }
    
    0 讨论(0)
  • 2020-12-08 05:28

    If you actually want to pass an array pointer, it's

    #include <stdio.h>
    
    void func(int (*B)[10]){   // ptr to array of 10 ints.
            (*B)[0] = 5;   // note, *B[0] means *(B[0])
             //B[0][0] = 5;  // same, but could be misleading here; see below.
    }
    
    int main(void){
    
            int B[10] = {0};   // not NULL, which is for pointers.
            printf("b[0] = %d\n\n", B[0]);
            func(&B);            // &B is ptr to arry of 10 ints.
            printf("b[0] = %d\n\n", B[0]);
    
            return 0;
    }
    

    But as mentioned in other answers, it's not that common to do this. Usually a pointer-to-array is passed only when you want to pass a 2d array, where it suddenly looks a lot clearer, as below. A 2D array is actually passed as a pointer to its first row.

    void func( int B[5][10] )  // this func is actually the same as the one above! 
    {
             B[0][0] = 5;
    }
    
    int main(void){
        int Ar2D[5][10];
        func(Ar2D);   // same as func( &Ar2D[0] )
    }
    

    The parameter of func may be declared as int B[5][10], int B[][10], int (*B)[10], all are equivalent as parameter types.

    Addendum: you can return a pointer-to-array from a function, but the syntax to declare the function is very awkward, the [10] part of the type has to go after the parameter list:

    int MyArr[5][10];
    int MyRow[10];
    
    int (*select_myarr_row( int i ))[10] { // yes, really
       return (i>=0 && i<5)? &MyArr[i] : &MyRow;
    }
    

    This is usually done as below, to avoid eyestrain:

    typedef int (*pa10int)[10];
    
    pa10int select_myarr_row( int i ) {
       return (i>=0 && i<5)? &MyArr[i] : &MyRow;
    }
    
    0 讨论(0)
  • 2020-12-08 05:29

    Maybe you were trying to do this?

    #include <stdio.h>
    
    int func(int * B){
    
        /* B + OFFSET = 5 () You are pointing to the same region as B[OFFSET] */
        *(B + 2) = 5;
    }
    
    int main(void) {
    
        int B[10];
    
        func(B);
    
        /* Let's say you edited only 2 and you want to show it. */
        printf("b[0] = %d\n\n", B[2]);
    
        return 0;
    }
    
    0 讨论(0)
提交回复
热议问题