What does this declarations means?

  • Thread starter Thread starter shermaine80
  • Start date Start date
  • Tags Tags
    Means
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
4 replies · 3K views
shermaine80
Messages
30
Reaction score
0
(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?
 
Physics news on Phys.org
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:
 
int a[3] is an array. It points to info at array[3]
 
shermaine80 said:
(a) int*p[3][3]
int a[3] is an array. It points to info at array[3]
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:
T name[N]
Are arrays with N elements of type T.
Code:
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:
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:
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:
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:
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:
Just like last time, this is an array, so p is an array of 10 int*(*())
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: