Reputation: 407
Why I'm getting compiling error in following code? and What is the difference between int (*p)[4]
, int *p[4]
, and int *(p)[4]
?
#include <stdio.h>
int main(){
int (*p)[4];// what is the difference between int (*p)[4],int *p[4], and int *(p)[4]
int x=0;
int y=1;
int z=2;
p[0]=&x;
p[1]=&y;
p[2]=&z;
for(int i=0;i<3;++i){
printf("%i\n",*p[i]);
}
return 0;
}
Upvotes: 0
Views: 73
Reputation: 1997
This is array of 4 pointers: int *p[4]
. So array will have 4 pointers, they point to int value. This is the same int *(p)[4]
.
As for int (*p)[4];
this is pointer to an array of 4 integers.
Upvotes: 1
Reputation: 1736
int (*p)[4]
: (*p)
is an array of 4 int
=> p
pointer to an array (array of 4 int
)int *p[4]
= int * p[4]
: p
is an array of 4 int *
int *(p)[4]
: same as the secondIn your case, you should the second form.
Upvotes: 1
Reputation: 206577
There is no difference between
int *p[4];
and
int *(p)[4];
Both declare p
to be an array of 4 pointers.
int x;
p[0] = &x;
is valid for both.
int (*p)[4];
declares p
to be a pointer to an array of 4 int
s.
You can get more details on the difference between
int *p[4];
int (*p)[4];
at C pointer to array/array of pointers disambiguation.
Upvotes: 2