这让我大吃一惊。我真的不知道这是什么。我有以下代码:
char cSexMF = 'M';
printf("%c \n", &cSexMF);
它应该输出M但是每次我运行代码时它都会出现一个不同的数字或字母或符号,或者它真正想要的任何东西。我认为这是一个直截了当的命令,但显然我甚至不能再这样了。
任何人都可以提供一些有关为什么会发生这种情况的见解吗?
答案 0 :(得分:5)
因为您传递了错误的参数。
"%c"
说明符需要char
,并且您传递的变量地址为char *
。
要使其有效,只需删除运营商的&
地址
printf("%c\n", cSexMF);
您可能会感到困惑,因为如果scanf()
需要&
,原因是scanf()
需要修改变量的内容,并为其传递地址它通过指针修改它。 printf()
函数需要值,而不是地址。
并且还启用编译器警告。作为一名学习c语言的程序员,它可以为你节省很多问题,甚至实验程序员也会使用警告来防止愚蠢的拼写错误。
答案 1 :(得分:2)
你正在传递一个指针。不要这样做。
char cSexMF = 'M';
printf("%c \n", cSexMF);
在变量名称前面添加&
时,会导致地址提取。在这里,您尝试将指向char 的指针传递给期望 char 的调用。
答案 2 :(得分:1)
在变量之前添加一元&
时,它会返回该变量的地址。因此,您试图打印cSexMF
的地址而不是它所持有的值。
使用printf()
时,您无需添加&
,只需
printf("%c \n", cSexMF);
就足够了(除非你真的想输出地址,但是你需要使用%p
类型说明符)。
通常,当您使用scanf()
时,在变量之前添加&
(因为您将值存储在该地址),但在使用{{1时}时不需要这样做}}