|
|
View previous topic :: View next topic |
Author |
Message |
c_user
Joined: 19 May 2010 Posts: 9
|
Pointer to array pointer to structures - compile error help |
Posted: Sat Jun 12, 2010 3:55 pm |
|
|
I have the following structure:
Code: | typedef struct font_struct
{
int16 font_length;
int16 font_width;
} font_select; |
I then add an array of pointers to this structure, which compiles correctly:
Code: | font_select *screen_ptr[3]; |
Now, I want to add a point to this array of pointers, and am using the following construction:
Code: | font_select (*(*scr_ptr)[]); |
The compiler issues an error report:
Code: | Executing: "C:\Program Files\PICC\Ccsc.exe" +FH "FT430.c" +DF +LN +T +A +M +Z +Y=9 +EA
*** Error 58 "FT430.c" Line 72(17,18): Expecting a close paren
*** Error 43 "FT430.c" Line 72(19,20): Expecting a declaration
*** Error 48 "FT430.c" Line 72(21,28): Expecting a (
*** Error 43 "FT430.c" Line 72(29,30): Expecting a declaration
*** Error 43 "FT430.c" Line 72(30,31): Expecting a declaration
*** Error 43 "FT430.c" Line 72(31,32): Expecting a declaration
*** Error 12 "FT430.c" Line 79(10,17): Undefined identifier scr_ptr
7 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Sat Jun 12 14:41:59 2010 |
What am I doing wrong? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Jun 12, 2010 11:40 pm |
|
|
The method used in the test program shown below appears to work.
Here's the program output (in MPLAB simulator):
Quote: |
Pointers to structures:
0005
0009
000d
Pointer to array of pointers:
0011
|
.Sym file:
Quote: |
005-010 fs
011-016 screen_ptr
017-018 scr_ptr
|
Test program. Compiled with vs. 4.107:
Code: |
#include <18F452.h>
#fuses XT,NOWDT,PUT,BROWNOUT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
typedef struct font_struct
{
int16 font_length;
int16 font_width;
}font_select, *p_fs;
// Declare an array of 3 of the above structures.
font_select fs[3];
// Declare an array of pointers to the 3 structures,
// and initialize it the start address of each
// structure.
p_fs screen_ptr[3] = {
&fs[0].font_length,
&fs[1].font_length,
&fs[2].font_length
};
// Declare a pointer to the array of pointers above
// and initialize it.
p_fs *scr_ptr = screen_ptr;
//======================================
void main(void)
{
int8 i;
printf("Pointers to structures: \r");
for(i=0; i < 3; i++)
printf("%lx \r", (int16)screen_ptr[i]);
printf("Pointer to array of pointers: \r");
printf("%lx \r", (int16)scr_ptr);
while(1);
}
|
|
|
|
c_user
Joined: 19 May 2010 Posts: 9
|
|
Posted: Sun Jun 13, 2010 10:48 pm |
|
|
Thanks for giving me a solution. I see why it works. But I am still curious whether my C declaration was wrong, or whether the compiler can't handle it. If you know, I'd appreciate hearing your analysis. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|