What does this declarations means?

  • Thread starter Thread starter shermaine80
  • Start date Start date
  • Tags Tags
    Means
AI Thread Summary
The discussion focuses on the interpretation of two complex pointer declarations in C/C++. The first declaration, int*p[3][3], represents a 3x3 array of pointers to integers, where each element can point to an integer variable. The example provided illustrates how to assign addresses of integer variables to elements of this array. The second declaration, int*(*p())[10], is more complex and is interpreted as an array of 10 function pointers, each returning a pointer to an integer. However, the syntax is problematic, as it leads to compiler errors. A corrected version, int*(*p[10])(), is suggested, which clarifies that p is an array of function pointers. The discussion emphasizes the importance of understanding array and pointer syntax in C/C++ to avoid confusion and errors in code.
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?
 
Technology 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:
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Thread 'Project Documentation'
Trying to package up a small bank account manager project that I have been tempering on for a while. One that is certainly worth something to me. Although I have created methods to whip up quick documents with all fields and properties. I would like something better to reference in order to express the mechanical functions. It is unclear to me about any standardized format for code documentation that exists. I have tried object orientated diagrams with shapes to try and express the...
Back
Top