字符数组,为什么我必须“取消引用”一个单个字符的字符串来分配它

时间:2014-10-12 11:45:20

标签: c string char

int main() {
    char test[15] = "Hallo World";
    test[1] = *"e";
}

要将第二个字母更改为e,我必须遵循字符串"e"。我找不到任何关于为什么会这样的信息。如果我不取消引用字符串"e",则测试最终会变为"H$llo World"。有人可以启发我吗?

2 个答案:

答案 0 :(得分:1)

C中的字符文字拼写为撇号:

test[1] = 'e';

当然,您可以通过任意数量的产生字符值的混淆,复杂的表达式,但这是实现预期行为的最直接和最直接的方法。

答案 1 :(得分:1)

在此代码段中

int main() {
    char test[15] = "Hallo World";
    test[1] = *"e";
}

"e"是一个字符串文字,其类型为char[2],它是一个包含两个字符'e'和终止零'\0'

的数组

您可以使用字符文字'e'代替字符串文字。在这种情况下,你可以写

    test[1] = 'e';

对于字符串文字,表达式*"e"等同于"e"[0],它返回与字符串文字对应的数组的第一个字符。

考虑到有时在C中使用了一些字符串文字的清单常量。例如

#define YES_NO "y/n"

在这种情况下,如果您遇到代码

,就没有什么奇怪的了
if ( c == *YES_NO ) { /* some stuff */ }

或     if(c == YES_NO [0]){/ * some stuff * /}