3

How to declare a triple pointer with array of pointers like i have

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

see the picture

alt text

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

1
  • You can nest arrays, but you need to explicitly specify all dimensions safe one. Commented Jul 26, 2010 at 10:39

3 Answers 3

2

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;
Sign up to request clarification or add additional context in comments.

1 Comment

This is model of the types involved from the picture you had up, not a verbatim solution. Please refer to a C programming tutorial on data structures if that's what you require!
1

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).

Comments

0

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();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.