所以我理解使用类型转换。使一种变量充当另一种变量。但每次我试图这样做都会打印钻石大声笑?
#include <stdio.h>
#include <strings.h>
#include <windows.h>
void loginscreen(void)
{
printf("\nWelcome to the login screen...\n");
int num = 4;
printf("%c", (char)num);
getchar();
}
我也可以得到malloc的解释以及它为什么以及如何使用类型转换。
答案 0 :(得分:2)
您正在将号码4
转换为ASCII character 4
,恰好是EOT(传输结束)。这是一个特殊字符,表示输入结束。在类Unix系统中,可以通过在Windows中按 Ctrl + D ( Ctrl + Z )生成它。由于这是一个不可打印的字符,您的终端可能会将其显示为“ ”,替换字符用于替换未知或不可代表的字符。
解决你的另一个问题,malloc()
基本上要求系统给你一大块内存。网上有很多精彩的资源,你可以找到很好的解释。
答案 1 :(得分:0)
转换(不是“类型转换”不会使一种变量充当另一种;它将一种类型的值转换为另一种类型(或者可能转换为相同的类型)。
(指针转换可用于将对象重新解释为不同类型的对象。您的代码不会这样做。)
有些转换含蓄;其他人是明确的。强制转换是一个由带括号的类型名称组成的运算符;它指定了显式转换。 (没有隐含的演员阵容。)
在你的例子中:
printf("%c", (char)num);\
num
(类型为int
)的值将转换为char
类型。然后立即将其转换(提升)回到类型int
,因为当类型比int
更窄的类型作为参数传递给类似printf
的可变函数时,这就是行为。如果没有演员阵容,它的行为方式将完全相同:
printf("%c\n", num);
它打印值为4的字符,恰好是一个不可打印的控制字符。
您询问了malloc
,但由于您的代码中没有调用malloc
,这是(a)单独的问题,(b)它相当含糊。如果您对malloc
有更具体的问题,可以单独发布。但首先,我建议阅读comp.lang.c FAQ的第7节,其中讨论了内存分配。 (特别是,你不应该转换malloc
的结果;它是不必要的,并且在某些情况下可以掩盖错误。)