所以我理解类型转换的使用。使一种变量充当另一种变量。但是每次我尝试这样做时,它都会打印钻石,哈哈?
#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 以及它为什么以及如何使用类型转换。
您正在将数字4
转换为 ASCII 字符4
,恰好是 EOT(传输结束)。这是一个特殊字符,表示输入结束。在类Unix系统中,可以通过按Ctrl +D(Windows中的Ctrl+Z)生成它。由于这是一个不可打印的字符,您的终端可能将其显示为" ",这是用于替换未知或无法表示的字符的替换字符。
解决你的另一个问题,malloc()
基本上要求系统给你一大块内存。网络上有很多很棒的资源,您可以在其中找到非常好的解释。
强制转换(不是"类型转换"不会使一种类型的变量充当另一种类型;它将一种类型的值转换为另一种类型(或者可能转换为相同的类型)。
(指针转换可用于将对象重新解释为不同类型的对象。你的代码不会这样做。
有些转换是隐式的;有些是显式的。强制转换是由括号类型名称组成的运算符;它指定显式转换。(没有隐式演员表这样的东西。
在您的示例中:
printf("%c", (char)num);
num
的值(类型为int
)将转换为类型char
。然后它立即转换(提升)回类型int
,因为这是当比int
窄的类型作为参数传递给像printf
这样的可变参数函数时的行为。如果没有演员表,它的行为方式完全相同:
printf("%cn", num);
它打印值为 4 的字符,该字符恰好是不可打印的控制字符。
你问了malloc
,但由于你的代码中没有调用malloc
,所以这是(a)一个单独的问题,(b)它相当模糊。如果您有关于malloc
的更具体的问题,您可以单独发布。但首先,我建议阅读 comp.lang.c FAQ 的第 7 节,其中讨论了内存分配。(特别是,您不应该强制转换malloc
的结果;这是不必要的,并且在某些情况下可能会掩盖错误。