原始数据类型目标c的指针

时间:2013-07-10 03:14:11

标签: objective-c pointers

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

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

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

没有抛出编译错误,它是一个原始数据类型,它不能有指针,是什么使它编译并始终返回yes,无论内部条件如何。

请原谅我,为什么

int *magicNumber = value / 25;

没有抛出编译错误。

2 个答案:

答案 0 :(得分:2)

C并不像您显然认为的那样严格打字。为指针分配整数是合法的,但通常是不明智的。编译器应该已经警告过你,赋值是一个没有强制转换的整数的指针。

答案 1 :(得分:-1)

在这两种情况下,您都要声明变量并在其中使用它们而不进行任何初始化。

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

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

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

在第二种情况下

int *magicNumber = value / 25;

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