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

What is the difference between the two in C. The first is an array of pointers. My main confusion regarding the second declaration. What is he announcing. Don't these two coincide?

int *p []={&i,&j,&k}; int (*ar) []; 
+5
source share
2 answers

These two options do not match. The second is a pointer to an int array .

You can use such an declaration as a parameter of a function 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 can 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 
+4
source

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"

+6
source

Source: https://habr.com/ru/post/1269901/


All Articles