Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does int (*ar) [] declaration mean in C? [duplicate]

What is the difference between these two in C. The first one is array of pointers. My main confusion is about the second declaration. What does it declare. Aren't the two the same ?

int *p []={&i,&j,&k};

int (*ar) [];
like image 426
Neer Avatar asked Jul 17 '17 12:07

Neer


2 Answers

Just follow the "right-left" rule

int *p []={&i,&j,&k}; // reads: "p is an array of pointers to int"

int (*ar) []; // "ar is a pointer to an array of ints"

like image 155
K. Kirsz Avatar answered Oct 14 '22 16:10

K. Kirsz


The two are not the same. The second is a pointer to an array of int.

You can use such a declaration as a function parameter when passing a 2D array as a parameter. For example, given this function:

void f(int (*ar)[5])    // array size required here to do pointer arithmetic for 2D array
{
    ...
}

You could call it like this:

int a[5][5];
f(a);

Another example as a local parameter:

int a[5] = { 1,2,3,4,5 };
int (*ar)[];   // array size not required here since we point to a 1D array
int i;

ar = &a;
for (i=0;i<5;i++) {
    printf("a[%d]=%d\n", i, (*ar)[i]);
}

Output:

a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
like image 29
dbush Avatar answered Oct 14 '22 15:10

dbush