【发布时间】:2010-10-01 16:43:18
【问题描述】:
如何检测变量是否为浮点、双精度、整数等?
谢谢。
【问题讨论】:
标签: iphone variables sdk types detect
如何检测变量是否为浮点、双精度、整数等?
谢谢。
【问题讨论】:
标签: iphone variables sdk types detect
Objective-C 不像 PHP 或其他解释语言,其中变量的“类型”可以根据您使用它的方式而改变。所有变量在声明时都设置为固定类型,并且无法更改。由于类型是在编译时定义的,因此无需在运行时查询变量的类型。
例如:
float var1; // var1 is a float and can't be any other type
int var2; // var2 is an int and can't be any other type
NSString* var3; // var3 is a pointer to a NSString object and can't be any other type
类型在变量名之前指定,也在函数中:
- (void)initWithValue:(float)param1 andName:(NSString*)param2
{
// param1 is a float
// param2 is a pointer to a NSString object
}
如您所见,在声明变量时类型是固定的(您还会注意到必须声明所有变量,即您不能突然开始使用新变量名,除非您首先声明它)。
【讨论】:
在基于编译的 C 语言中(在带有符号的调试模式之外),您实际上无法“检测”任何变量,除非您知道类型,或者猜测类型并获得好运。
所以通常情况下,您在任何变量引用之前都知道并声明类型。
如果没有类型信息,您能做的最好的事情可能是取消引用指向内存中随机未知位/字节的指针,并希望不会因非法内存引用而崩溃。
添加评论:
如果您知道该类型是合法的 Objective C 对象,那么您可能能够查询运行时以获取有关该类等的其他信息。但不能查询整数、双精度数等。
【讨论】:
使用 sizeof。对于双倍,它将是 8。对于浮动,它是 4。 双 x = 3.1415; 浮动 y = 3.1415f; printf("x 的大小为 %d\n", sizeof(x)); printf("y 的大小为 %d\n", sizeof(y));
【讨论】: