By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
457,933 Members | 1,574 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 457,933 IT Pros & Developers. It's quick & easy.

pointer to array v/s array of pointers

P: n/a
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

Nov 14 '05 #1
Share this Question
Share on Google+
6 Replies


P: n/a
"mann!" <ma************@gmail.com> 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;}
Nov 14 '05 #2

P: n/a
( ) 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???

Nov 14 '05 #3

P: n/a
"mann!" <ma************@gmail.com> 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;}
Nov 14 '05 #4

P: n/a
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

Nov 14 '05 #5

P: n/a
"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
Nov 14 '05 #6

P: n/a
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.

Nov 14 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.