Re: Pointer refering to an array of structutes?
On Sat, 1 Dec 2007 12:20:00 -0800, Robby <Robby@discussions.microsoft.com>
wrote:
Hello,
I would like to create an array of structures and then be able to access any
item of the structure in any element of the array via a pointer. This way if
I am in a function and I need information of an item of a particular
structure, I can simply just pass the pointer to the structure and not the
whole array of structures!
It is not possible to "pass the whole array of structures".
So I believe I need to create a pointer that can reference an array of
structures.
Right?
No.
here is my structure I declared:
struct MAB {
int FONT_NAME; //NAME OF FONT
int LETTER_HEIGHT; //HEIGHT OF THE LETTER
int LETTER_WIDHT; //WIDTH OF THE LETTER
};
I then declared the array of structures:
struct MAB ARY[20];
Then I tried to create the pointer to this array:
struct MAB (*mypointer)[20];
I get errors... this is how I saw some examples done on the Internet!
You've declared a pointer to an array, when you simply need to use a
pointer to a MAB. There is something called the "standard array to pointer
conversion". It says that in almost all contexts, an array used in an
expression is converted to a pointer to its first element. Therefore, when
you say:
f(ARY);
The argument "ARY" is (normally) converted to a pointer to ARY's first
element, and this pointer has the type MAB*. This occurs for all these
following declarations of f, which are equivalent in every way:
void f(MAB*);
void f(MAB[]);
void f(MAB[2]);
void f(MAB[20]);
The first one expresses the underlying reality best. Note that it is only
in the context of function parameter declarations that the pointer and
array syntax are interchangeable, and even then, it only applies to the
first dimension.
Oh, and about your mypointer declaration, it is a pointer to a MAB[20]. The
type MAB(*)[20] is the type of &ARY, and it's also the type of the first
element of a 2D array of MAB. You're using neither, so you should just use
a MAB*. For more on all this, see:
http://c-faq.com/aryptr/index.html
--
Doug Harrison
Visual C++ MVP