Как создать массив из массива структур - PullRequest
0 голосов
/ 17 декабря 2009

Я пытаюсь создать таблицу символов, используя массив из массива структур.

Сейчас у меня просто есть массив структур, и он создан так:

#define MAXSIZE 20 /* maximum number of symbols */
#define MAXSCOPE 10 /* maximum number of scope levels */

 struct tableEntry {
 char *name;
 char *args;
 int value;
 int scope;
 char *type;
 int used;
 } tableEntry [MAXSIZE];

Это работает, но я хочу сделать что-то вроде этого:

symbolTable[MAXSCOPE].tableEntry[MAXSIZE]

Как бы я это сделал? Имеет ли смысл то, что я пытаюсь сделать?

Ответы [ 3 ]

3 голосов
/ 17 декабря 2009
struct tableEntry symbolTable[MAXSCOPE];

и используйте, например,

symbolTable[scope][entry].value;
2 голосов
/ 17 декабря 2009

Если вы действительно хотели получить к нему доступ таким образом ...

#define MAXSIZE 20 /* maximum number of symbols */
#define MAXSCOPE 10 /* maximum number of scope levels */

 struct _table_entry_ {
     char *name;
     char *args;
     int value;
     int scope;
     char *type;
     int used;
};

struct _symbol_table_ {
    _table_entry_ tableEntry[MAXSIZE]; 
}symbolTable[MAXSCOPE];

Это как вы можете получить доступ к данным

symbolTable[1].tableEntry[2].value = 1;
2 голосов
/ 17 декабря 2009

Создание двумерного массива структур:

// Define the type
typedef struct tableEntry {
    char *name;
    char *args;
    int value;
    int scope;
    char *type;
    int used;
} tableEntry;

// Instantiate a 2D array of this type
tableEntry myArray[MAXSCOPE][MAXSIZE];

Теперь вы можете получить доступ к отдельным записям, как это:

// Initialise 'value' in each entry to 2
int scope=0;
int size=0;
for (; scope < MAXSCOPE; scope++)
{
    for (; size < MAXSIZE; size++)
    {
        myArray[scope][size].value = 2;
    }
}
...