我知道这可能是一个愚蠢的问题。
我对此完全感到困惑,我接受我还没有正确理解基础知识。为什么
BOOL *booleanTest = (5 < 1)? YES : NO;
没有抛出编译错误,它是一个原始数据类型,它不能有指针,是什么使它编译并始终返回yes,无论内部条件如何。
请原谅我,为什么
int *magicNumber = value / 25;
没有抛出编译错误。
答案 0 :(得分:2)
C并不像您显然认为的那样严格打字。为指针分配整数是合法的,但通常是不明智的。编译器应该已经警告过你,赋值是一个没有强制转换的整数的指针。
答案 1 :(得分:-1)
在这两种情况下,您都要声明变量并在其中使用它们而不进行任何初始化。
我假设您不知道声明和初始化之间的区别,因此在声明期间,变量的值设置为垃圾或一些随机值。如何分配是因为指针所指向的存储器单元是一些随机存储器单元,其被一些其他应用程序使用,该应用程序将值保留在那里。 现在第一种情况会发生什么:
BOOL *booleanTest = (5 < 1)? YES : NO;
指针booleanTest设置为BOOL类型,它指向的值只是指向完整内存单元所需数字的一半。因此它占用了单元格的前几位,可能是1,所以它总是会变为YES。
在第二种情况下
int *magicNumber = value / 25;
这不会导致任何编译错误,因为在法律上允许将值存储在指向的值内。它获取类型转换为指针的确切变量类型。