我有这样的代码:
const char menu23[] = "2.3. ";
const char menu24[] = "2.4. ";
const char menu25[] = "2.5. ";
const char menu26[] = "2.6. ";
const char menu27[] = "2.7. ";
const char menu28[] = "2.8. ";
MenuEntry menu[] = // MenuEntry is a struct
{
{menu23, MENU2_OPTIONS, 22, 24, 23, 0, 0, 0}, // 23
{menu24, MENU2_OPTIONS, 23, 25, 2, 0, 0, 0}, // 24
{menu25, MENU2_OPTIONS, 24, 26, 0, 0, 0, 0}, // 25
{menu26, MENU2_OPTIONS, 25, 27, 0, 0, 0, 0}, // 26
{menu27, MENU2_OPTIONS, 26, 28, 0, 0, 0, 0}, // 27
{menu28, MENU2_OPTIONS, 27, 29, 0, 0, 0, 0} // 28
}
我可以用它替换吗?
MenuEntry menu[] = // MenuEntry is a struct
{
{"2.3. ", MENU2_OPTIONS, 22, 24, 23, 0, 0, 0}, // 23
{"2.4. ", MENU2_OPTIONS, 23, 25, 2, 0, 0, 0}, // 24
{"2.5. ", MENU2_OPTIONS, 24, 26, 0, 0, 0, 0}, // 25
{"2.6. ", MENU2_OPTIONS, 25, 27, 0, 0, 0, 0}, // 26
{"2.7. ", MENU2_OPTIONS, 26, 28, 0, 0, 0, 0}, // 27
{"2.8. ", MENU2_OPTIONS, 27, 29, 0, 0, 0, 0} // 28
}
有任何功能差异吗?
答案 0 :(得分:2)
存在大差异。
在此问题中,MenuItem
的第一个成员必须是char *
类型。 (否则此问题中的第一版代码将因编译错误而失败。)
char menu23[] = "2.3. ";
这是一个char数组。字符串存储在数组的内存中。它的寿命与数组相同。如果它在函数中定义,它将在函数返回后被销毁。如果它被定义为全局变量,则第二个版本没有功能差异。 (但在实施角度上仍然不同。)
{"2.3. ", MENU2_OPTIONS, 22, 24, 23, 0, 0, 0},
此行中的字符串是文字常量。它将存储在内存的静态区域中。它的生命周期与您的应用程序相同。
答案 1 :(得分:0)
没有差异。但是,第一个可以更灵活,以防您以后想要更改每个菜单的名称(如果在多个位置使用常量名称)。