C 为什么我打印的字符不起作用?

C 为什么我打印的字符不起作用?,c,char,printf,C,Char,Printf,这真让我大吃一惊。我真的不知道这是怎么回事。我有以下代码: char cSexMF = 'M'; printf("%c \n", &cSexMF); 它应该输出M,但是每次我运行代码时,它都会输出一个不同的数字、字母、符号或它真正喜欢的任何东西。我认为这是一个直截了当的命令,但显然我甚至不能再这样做了 有人能提供一些关于为什么会发生这种情况的见解吗?因为您传递了错误的参数 %c说明符需要一个字符,而您正在传递类型为char*的变量的地址 要使其正常工作,只需删除操作员的地址(&A)

这真让我大吃一惊。我真的不知道这是怎么回事。我有以下代码:

char cSexMF = 'M';

printf("%c \n", &cSexMF);
它应该输出M,但是每次我运行代码时,它都会输出一个不同的数字、字母、符号或它真正喜欢的任何东西。我认为这是一个直截了当的命令,但显然我甚至不能再这样做了


有人能提供一些关于为什么会发生这种情况的见解吗?

因为您传递了错误的参数

%c说明符需要一个字符,而您正在传递类型为char*的变量的地址

要使其正常工作,只需删除操作员的地址(&A)

printf("%c\n", cSexMF);
您可能会感到困惑,因为如果它是scanf,那么&将是必需的,原因是scanf需要修改变量的内容,为此,您传递它的地址,它通过指针修改它。printf函数需要的是值,而不是地址


同时,启用编译器警告。作为一名学习c语言的程序员,这将为您节省很多问题,即使是经过实验的程序员也会使用警告来防止愚蠢的输入错误。

因为您传递了错误的参数

%c说明符需要一个字符,而您正在传递类型为char*的变量的地址

要使其正常工作,只需删除操作员的地址(&A)

printf("%c\n", cSexMF);
您可能会感到困惑,因为如果它是scanf,那么&将是必需的,原因是scanf需要修改变量的内容,为此,您传递它的地址,它通过指针修改它。printf函数需要的是值,而不是地址


同时,启用编译器警告。作为一名学习c语言的程序员,这将为您节省很多问题,即使是经过实验的程序员也会使用警告来防止愚蠢的打字错误。

您正在传递指针。不要这样做

char cSexMF = 'M';
printf("%c \n", cSexMF);

在变量名前面添加&时,将导致地址提取。在这里,您尝试将指向char的指针传递给需要char的调用

您正在传递一个指针。不要这样做

char cSexMF = 'M';
printf("%c \n", cSexMF);
在变量名前面添加&时,将导致地址提取。在这里,您尝试将指向char的指针传递给需要char的调用

在变量之前添加一元&时,它返回该变量的地址。因此,您正在尝试打印cSexMF的地址,而不是它所持有的值

使用printf时,不需要添加&,只需

这就足够了,除非您确实想要输出地址,但是您需要使用%p类型说明符

通常,在使用scanf时,在变量之前添加&是因为您将值存储在该地址,但在使用printf时不需要这样做。当您在变量之前添加一元时,它将返回该变量的地址。因此,您正在尝试打印cSexMF的地址,而不是它所持有的值

使用printf时,不需要添加&,只需

这就足够了,除非您确实想要输出地址,但是您需要使用%p类型说明符


通常,当您使用scanf时,您会在变量之前添加&因为您将值存储在该地址,但在使用printf时,您不需要这样做

哦,天哪,我才意识到我是一个多么愚蠢的人。谢谢你,我的天啊,我才意识到我是个白痴。谢谢。为什么?您想要字符还是它的内存地址?为什么&?您想要字符还是它的内存地址?