的数组如何声明三指针的指针数组声明三重指针像我有如何指针
char *mainmenu[] = {"menu1", "menu2", "menu3"}
看到的画面
alt text http://www.freeimagehosting.net/uploads/6988d25305.png
如何连接我的菜单1, 2,3与那些从图片m1p1 m2p1 ???我只需要语法请帮我...
的数组如何声明三指针的指针数组声明三重指针像我有如何指针
char *mainmenu[] = {"menu1", "menu2", "menu3"}
看到的画面
alt text http://www.freeimagehosting.net/uploads/6988d25305.png
如何连接我的菜单1, 2,3与那些从图片m1p1 m2p1 ???我只需要语法请帮我...
您可以使用多个*
或多个括号组。鉴于你描述的数据结构,我会去
char *mainmenu[X][Y] = {{"m1p1", "m1p2", "m1p3"}, {"m2p1", "m2p2"}}
。
请注意,必须定义Y.在C中的多维数组中,必须定义除最外层维以外的所有维的长度(如果使用数据初始化它)。
all[0]
是char **
类型,并且将匹配的的mainmenu
定义,尽管它似乎与阵列中一个终止NULL
。
char ***all;
char *mainmenu[] = {"menu1", "menu2", "menu3", NULL};
all[0] = mainmenu;
使用未初始化的局部变量'all':S – ScReYm0 2010-07-26 10:53:35
这是您从图片中涉及的类型的模型,而不是逐字解决方案。如果这是你需要的,请参考关于数据结构的C编程教程! – 2010-07-26 15:41:43
它更然后你问,但应该是有帮助的:
/* 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();
可以通过嵌套数组,但你需要明确指定所有维度安全可靠。 – sbi 2010-07-26 10:39:06