How to de开发者_运维问答clare a triple pointer with array of pointers like i have
char *mainmenu[] = {"menu1", "menu2", "menu3"}
see the picture
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();
精彩评论