which definition is better?
===

    
    #include<stdio.h>
    int main(int argc , char *argv[])
    {
        int array[2][2] = {{1,100},{1000,10000}};

        int *pointer    = array;
        int *ppointer   = &array;
        int *pppointer  = array[0];
        int *ppppointer = &array[0];

        printf("%d\n",*pointer);
        printf("%d\n",*ppointer);
        printf("%d\n",*pppointer);
        printf("%d\n",*ppppointer);

        return 0;
    }
Four pointers are point to the first element of array.
which definition shown above is better?
And I don't known why the same value to array and &array?