开发者

How to declare triple pointers in array of pointers

How to de开发者_运维问答clare a triple pointer with array of pointers like i have

char *mainmenu[] = {"menu1", "menu2", "menu3"}

see the picture

How to declare triple pointers in array of pointers

How to connect my menu1,2,3 with those from the picture m1p1 m2p1 ??? I just need the syntax please help me ...


all[0] is of type char **, and will match your definition of mainmenu, albeit it appears with a terminating NULL in the array.

char ***all;
char *mainmenu[] = {"menu1", "menu2", "menu3", NULL};
all[0] = mainmenu;


You can use more than one *, or more than one set of brackets. Given the data structure you described, I'd go with
char *mainmenu[X][Y] = {{"m1p1", "m1p2", "m1p3"}, {"m2p1", "m2p2"}}.
Note that Y must be defined. In multidimensional arrays in C, you have to define the length of all but the outermost dimension (if you initialize it with data).


It's more then you ask, but should be helpful:

/* Functions associated to menu items */
void M1P1() { puts("Hey! You selected menu 1 position 1!"); }
void M1P2() { puts("Hey! You selected menu 1 position 2!"); }
void M1P3() { puts("Hey! You selected menu 1 position 3!"); }
void M2P1() { puts("Hey! You selected menu 2 position 1!"); }
void M2P2() { puts("Hey! You selected menu 2 position 2!"); }
// ...

/* structure describing single sub-menu item */
typedef struct {
    char *caption; // item caption
    void (*action)(); // function associated to this item
} SubMenuItem;

/* array of all sub-menu items of menu1 */
SubMenuItem sub_menu1[] = {
    { "m1p1", M1P1 },
    { "m1p2", M1P2 },
    { "m1p3", M1P3 },
};
/* array of all sub-menu items of menu2 */
SubMenuItem sub_menu2[] = {
    { "m2p1", M2P1 },
    { "m2p2", M2P2 },
};
// ...

/* structure describing single main-menu item */
typedef struct {
    char *caption; // item caption
    SubMenuItem *sub_menus; // array of sub-menu items
    unsigned sub_menus_count; // number of sub-menu items (length of the array)
} MenuItem;

/* array of all main-menu items */
MenuItem menu[] = {
    { "menu1", sub_menu1, sizeof(sub_menu1) / sizeof(sub_menu1[0]) },
    { "menu2", sub_menu2, sizeof(sub_menu2) / sizeof(sub_menu2[0]) },
    // ...
};

/* number all main-menu items */
#define MENU_ITEMS_COUNT (sizeof(menu) / sizeof(menu[0]));


/* Example - iterationg menu */
int i, j;
for (i = 0; i < MENU_ITEMS_COUNT; i++) { // iterate through main-menu items
    printf("%d) %s\n", i + 1, menu[i].caption); // print main-menu item index and caption
    for (j = 0; j < menu[i].sub_menus_count; j++) { // iterate through sub-menu items of current main-menu item
        printf("\t%d.%d) %s\n", i + 1, j + 1, menu[i].sub_menus[j].caption); // print indices and sub-menu item caption
    }
}

putchar('\n');

/* Example - running action associated to menu item */
/* To run action associeted to menu 1 position 2 */
menu[0].sub_menus[1].action();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜