0

我知道这可能是一个愚蠢的问题。

我对此完全感到困惑,我接受我没有正确理解基础知识。为什么

BOOL *booleanTest = (5 < 1)? YES : NO;

没有抛出编译错误,它是一个原始数据类型,它不能有指针,是什么让它编译并总是返回 yes,不管里面的条件如何。

请赐福给我原因和原因

int *magicNumber = value / 25;

没有抛出编译错误。

4

2 回答 2

2

C 的类型并不像您显然相信的那样严格。将整数分配给指针是合法的,尽管通常是不明智的。不过,编译器应该已经警告您,该赋值从一个没有强制转换的整数中生成一个指针。

于 2013-07-10T03:24:52.713 回答
-1

在这两种情况下,您都在声明变量并在其中使用它们本身而无需任何类型的初始化。

我假设您不知道声明和初始化之间的区别,因此在声明期间变量的值设置为垃圾或某个随机值。这是如何分配的,因为指针指向的内存单元是一些随机内存单元,它被其他一些应用程序使用,该应用程序将值留在那里。现在在第一种情况下会发生什么:

BOOL *booleanTest = (5 < 1)? YES : NO;

指针 booleanTest 设置为 BOOL 类型,它指向的值只是指向完整存储单元所需的数字的一半。所以它占用了单元格的前几位,可能是 1,所以它总是会出现。

在第二种情况下

int *magicNumber = value / 25;

这不会导致任何编译错误,因为在法律上允许将值存储在指向值内。它将类型转换为指针的确切变量类型。

于 2013-07-10T03:33:45.080 回答