const char []变量之间的区别;和“一些人”

时间:2017-01-24 09:44:43

标签: c xc8

我有这样的代码:

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
}

有任何功能差异吗?

2 个答案:

答案 0 :(得分:2)

存在差异。

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

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

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

答案 1 :(得分:0)

没有差异。但是,第一个可以更灵活,以防您以后想要更改每个菜单的名称(如果在多个位置使用常量名称)。