pointer to array v/s array of pointers

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • mann!

    #1

    pointer to array v/s array of pointers

    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

    #2
    Re: pointer to array v/s array of pointers

    "mann!" <manan.kathuria @gmail.com> writes:
    [color=blue]
    > can some one please explain how
    >
    > int (*x)[10] declares a pointer to an array
    >
    > and
    >
    > int *x[10] declares an array of pointers?[/color]

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

    Comment

    • mann!

      #3
      Re: pointer to array v/s array of pointers

      ( ) 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???

      Comment

      • Ben Pfaff

        #4
        Re: pointer to array v/s array of pointers

        "mann!" <manan.kathuria @gmail.com> writes:
        [color=blue]
        > ( ) 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???[/color]

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

        Comment

        • C_prog

          #5
          Re: pointer to array v/s array of pointers

          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



          Comment

          • CBFalconer

            #6
            Re: pointer to array v/s array of pointers

            "mann!" wrote:[color=blue]
            >
            > ( ) 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???[/color]

            *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.c om, 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


            Comment

            • E. Robert Tisdale

              #7
              Re: pointer to array v/s array of pointers

              Manan wrote:
              [color=blue]
              > Can some one please explain how
              >
              > int (*x)[10];
              >
              > declares a pointer to an array and
              >
              > int *x[10];
              >
              > declares an array of pointers?[/color]

              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.

              Comment

              Working...