【问题标题】:Char (single letter) must be a pointer to correctly work?Char(单字母)必须是指针才能正确工作?
【发布时间】:2016-02-01 06:06:36
【问题描述】:

我已经搜索过,也许这甚至不是问题,但是在使用 C 中的字符时(我在 Mac 上使用 X-Code)我在处理它们时遇到了问题,除非我使用指针

int main(int argc, const char * argv[]){
    char myChar = "A";

    print("%c\n",myChar);
    print("%d\n",myChar);

    print("%c\n",65);
    print("%c\n",74);

    return 0;

}

所以,简单的东西,但这里是输出:

>J
>74

>A
>J

如您所见,当我使用 %c 打印 myChar 时,它给了我字母 J 而不是 A,当我使用 %d 时也是一样,给我 74(J 的字符代码)而不是 65。

我的变量声明中还有一条警告消息:

char[2]类型的表达式初始化char的整数转换指针不兼容

这有点奇怪。

现在用这个替换我的代码时:

int main(int argc, const char * argv[]){
    char *myChar = "A";

    print("%c\n",*myChar);
    print("%d\n",*myChar);

    print("%c\n",65);
    print("%c\n",74);

    return 0;

}

输出如预期:

>A
>65

>A
>J

知道这种行为是什么原因造成的吗?我错过了什么还是我没理解什么?

【问题讨论】:

  • "a" 是一个字符串(即指针)。 'a' 是一个字符(即int)。

标签: c xcode string pointers char


【解决方案1】:

在您的代码中,

char myChar = "A";

不正确。 "A" 是一个字符串文字,它不适合char。你可能想写

 char myChar = 'A';

改为。

注意:启用编译器警告并注意它们。

【讨论】:

  • 是的,就是这样。 OP 确实收到了警告,但无法理解,可能是因为警告提到了指针,而对于初学者来说指针是如何进入这里的并不明显。
  • @MOehm 是的,先生。 :)
  • 谢谢!不,我不明白这个警告,但除此之外,我想我明白指针是如何工作的
猜你喜欢
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 2015-06-27
  • 1970-01-01
相关资源
最近更新 更多