我知道这可能是个愚蠢的问题。
我完全对此感到困惑,我承认我没有正确地理解基础知识。为什么
BOOL *booleanTest = (5 < 1)? YES : NO;没有抛出编译错误,它是一个原始数据类型,并且它不能有指针,这使得它总是编译并返回yes,而不管内部条件如何。
请保佑我,告诉我原因和原因
int *magicNumber = value / 25;未引发编译错误。
发布于 2013-07-10 11:24:53
C的类型并不像你明显认为的那样严格。将整数赋值给指针是合法的,尽管通常是不明智的。但是,编译器应该警告你赋值是从一个整数中生成一个指针,而不是强制转换。
发布于 2013-07-10 11:33:45
在这两种情况下,您都在声明变量并在那里使用它们,而不需要任何类型的初始化。
我假设您不知道声明和初始化之间的区别,所以在声明期间,变量的值被设置为垃圾或某个随机值。它的赋值方式是因为指针指向的存储单元是某个随机存储单元,该存储单元被其他应用程序使用,该应用程序已将值留在那里。现在,在第一种情况下会发生什么:
BOOL *booleanTest = (5 < 1)? YES : NO;指针booleanTest被设置为类型BOOL,并且它所指向的值仅是指向整个存储单元所需的数值的一半。所以它占据了单元格的前几个比特,可能是1,所以它总是变成YES。
在第二种情况下
int *magicNumber = value / 25;这不会导致任何编译错误,因为它在法律上允许将值存储在指定值中。它将类型转换为指针的确切变量类型。
https://stackoverflow.com/questions/17561887
复制相似问题