1

我有这样的代码:

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
}

有什么功能上的区别吗?

4

2 回答 2

2

很大的不同。

在这个问题中,第一个成员MenuItem必须是char *类型。(否则此问题中的第一版代码将因编译错误而失败。)

char menu23[] = "2.3. ";这是一个字符数组。字符串存储在数组的内存中。它的生命周期与数组相同。如果它是在函数中定义的,它将在函数返回后被销毁。如果它被定义为全局变量,那么与第二个版本没有功能差异。(但在实施角度上仍然不同。)

{"2.3. ", MENU2_OPTIONS, 22, 24, 23, 0, 0, 0},此行中的字符串是文字常量。它将存储在内存的静态区域中。它的生命周期将与您的应用程序相同。

于 2017-01-24T11:23:36.683 回答
0

没有区别。但是,如果您想稍后更改每个菜单的名称(并且如果在多个位置使用常量名称),第一个可能会更加灵活。

于 2017-01-24T09:47:01.073 回答