# pointer to array v/s array of pointers

Discussion in 'C Programming' started by mann!, Feb 25, 2005.

1. ### mann!Guest

hi

can some one please explain how

int (*x)[10] declares a pointer to an array

and

int *x[10] declares an array of pointers?

....i just cant figure out how to interpret [] in an expression so if
you could put in a few lines about that too..
thanks in anticipation

Manan

mann!, Feb 25, 2005

2. ### Ben PfaffGuest

"mann!" <> writes:

> can some one please explain how
>
> int (*x)[10] declares a pointer to an array
>
> and
>
> int *x[10] declares an array of pointers?

[] has higher precedence than *, but () has higher precedence
than [].
--
int main(void){char p[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.\
\n",*q="kl BIcNBFr.NKEzjwCIxNJC";int i=sizeof p/2;char *strchr();int putchar(\
);while(*q){i+=strchr(p,*q++)-p;if(i>=(int)sizeof p)i-=sizeof p-1;putchar(p\
);}return 0;}

Ben Pfaff, Feb 25, 2005

3. ### mann!Guest

( ) has higher precedence , so for int (*x)[20] doesnt that mean it
defines an array of (*x) ie pointer to int, because (*x) is interpreted
as pointer first???

mann!, Feb 25, 2005
4. ### Ben PfaffGuest

"mann!" <> writes:

> ( ) has higher precedence , so for int (*x)[20] doesnt that mean it
> defines an array of (*x) ie pointer to int, because (*x) is interpreted
> as pointer first???

You appear not to understand the concept of precedence. () has
higher precedence, so "operators" inside it are interpreted
first.
--
int main(void){char p[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.\
\n",*q="kl BIcNBFr.NKEzjwCIxNJC";int i=sizeof p/2;char *strchr();int putchar(\
);while(*q){i+=strchr(p,*q++)-p;if(i>=(int)sizeof p)i-=sizeof p-1;putchar(p\
);}return 0;}

Ben Pfaff, Feb 25, 2005
5. ### C_progGuest

Hi

*x means 'pointer to' and not 'pointer of'
so (*x)[20] id pointer to array of 20 elements.

Are u or anyone else u know of is doing self-study in C-programming in a
time bound schedule?

Thanks

C_prog, Feb 25, 2005
6. ### CBFalconerGuest

"mann!" wrote:
>
> ( ) has higher precedence , so for int (*x)[20] doesnt that mean it
> defines an array of (*x) ie pointer to int, because (*x) is interpreted
> as pointer first???

*x defines an int. So does (*x). Thus the appended [] makes the
result an array of ints. Meanwhile "int *x" defines x as a pointer
to int. Think of "int* x" which is the same thing with white space
moved around. The appended [] makes the result an array of
pointers.

--
"If you want to post a followup via groups.google.com, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the

CBFalconer, Feb 26, 2005
7. ### E. Robert TisdaleGuest

Manan wrote:

> Can some one please explain how
>
> int (*x)[10];
>
> declares a pointer to an array and
>
> int *x[10];
>
> declares an array of pointers?

I don't like to write

int *p;

It appears to imply that
you are declaring in object of type int
which you can reference with *p
but, in fact, *no* such object is created.
p is an [uninitialized] pointer to an object of type int.

I prefer to write

int* p;

for a pointer to an int.
*p is a reference to an int through pointer p
so, if I write

int (*p)[10];

*p must be a reference to an array of 10 int though pointer p
but

int* p[10];

is an array of 10 pointers to objects of type int.

E. Robert Tisdale, Feb 26, 2005