Velocity Reviews > pointer to array v/s array of pointers

# pointer to array v/s array of pointers

mann!
Guest
Posts: n/a

 02-25-2005
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

Ben Pfaff
Guest
Posts: n/a

 02-25-2005
"mann!" <(E-Mail Removed)> 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[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv wxyz.\
\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[i]\
);}return 0;}

mann!
Guest
Posts: n/a

 02-25-2005
( ) 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???

Ben Pfaff
Guest
Posts: n/a

 02-25-2005
"mann!" <(E-Mail Removed)> 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[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv wxyz.\
\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[i]\
);}return 0;}

C_prog
Guest
Posts: n/a

 02-25-2005
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

CBFalconer
Guest
Posts: n/a

 02-26-2005
"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
"Reply" at the bottom of the article headers." - Keith Thompson

E. Robert Tisdale
Guest
Posts: n/a

 02-26-2005
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.

 Thread Tools

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are Off Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post subramanian100in@yahoo.com, India C Programming 5 09-23-2011 10:28 AM cerr C Programming 12 04-07-2011 11:17 PM RSL C++ 14 02-19-2010 02:06 PM erfan C Programming 6 01-28-2008 08:55 PM sangeetha C Programming 9 10-09-2004 07:01 PM

Advertisments