Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

What does this declarations means?

  1. Nov 26, 2006 #1
    (a) int*p[3][3]
    (b) int*(*p())[10];

    (a) points to address of data in the row 3, column 3?
    (b) can you advise me? thanks?
     
  2. jcsd
  3. Nov 26, 2006 #2

    Hurkyl

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    Before I answer (a), do you know what

    int a[3]

    declares? What about

    int a[3][3]



    (b) means that some silly hacker likes to write obfuscated code, rather than use typedef's. :wink:
     
  4. Nov 26, 2006 #3
    int a[3] is an array. It points to info at array[3]
     
  5. Nov 26, 2006 #4
    It doesn't just point to information at array[3] (what do you mean by that?), it actually contains 3 integers (in the programming sense).

    Code (Text):
    T name[N]
    Are arrays with N elements of type T.
    Code (Text):
    T name[N1][N2];
    Are arrays of N1 elements of arrays of N2 elements of type T.
    In your first case we have a 3-dimensional array, where each element is another 3-dimensional array in which each element is a pointer to an integer.

    It's often called a 3x3 multi-dimensional array, one example use would be:
    Code (Text):
    int x,y,z;
    int* a[3][3];
    a[0][0] = &x; // Set the very first element of both arrays to point to x
    a[0][2] = &y; // Let the last element of the first array point to y.
    a[2][2] = &z; // Let the last element in both arrays point to z

    As for the second, either someone misunderstood the syntax of function pointers or they are trying to confuse you.
    Code (Text):
    int*(*p())[10];
    Just like last time, this is an array, so p is an array of 10 int*(*())
    The outer set of parentheses means nothing in this code, so it's equivalent to:
    Code (Text):
    int** ();
    Which is just a function returning a pointer to a pointer to an integer. So p is an array of functions, but we don't have first-class functions in C or C++, so we end up with an unusable array.

    What was most likely meant if this is real code is:
    Code (Text):
    int*(*p)()[10];
    Which is an array of 10 functions pointers, each pointing to a function returning a pointer to an integer and taking no arguments.
     
    Last edited: Nov 26, 2006
  6. Nov 26, 2006 #5

    Hurkyl

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    Almost: p is function that returns an int*[10].

    Also,

    int*(*p)()[10];

    doesn't quite work: gcc complains with

    `p' declared as function returning an array

    You're looking for

    int*(*p[10])();
     
    Last edited: Nov 26, 2006
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?