2017-01-24 122 views
1

我有这样的代码:const char []变量之间的区别;和“一些字符”

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 
} 

有什么功能上的区别吗?

+1

这将有助于显示'MenuEntry'的定义 –

回答

0

没有差异。然而,如果您稍后想要更改每个菜单的名称(以及在多个位置使用常量名称的情况下),则第一个可以更灵活。

+1

一般来说有差异;如果有问题的结构有第一个成员的数组,那么第二个版本可以工作,但第一个不会。 (由于第一个版本适用于OP,因此我们可以推断该结构具有const char *成员) –

+0

@ M.M错误。如果'MenuEntry'的第一个成员是char数组,则第二个版本也不能工作。因为字符数组不能用字符串文字分配。我们必须使用'strcpy()'来做到这一点。否则会出现编译错误。 –

+0

@MartinZhai字符串文字可以初始化一个字符数组,例如'char x [4] =“abc”;'。您将初始化与赋值 –

2

还有一个区别。

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

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

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

相关问题