2010-10-01 57 views

回答

4

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 
} 

因此,大家可以看到,变量声明时的类型是固定的(你也会注意到所有的变量都必须声明,也就是说,除非你先声明它,否则你不能突然开始使用新的变量名)。

-4

使用sizeof。对于双倍,将是8.浮点数为4。 double x = 3.1415; float y = 3.1415f; printf(“x的大小是%d \ n”,sizeof(x)); printf(“y的大小是%d \ n”,sizeof(y));

+0

这个答案根本不是问题所在,它不允许你区分具有相同大小的类型。 – jhabbott 2010-10-01 17:21:38

0

在编译的基于C的语言(除了带符号的调试模式之外),除非知道类型或猜测类型并且运气好,否则实际上不能“检测”任何变量。

所以通常情况下,您知道并在任何变量引用之前声明该类型。

如果没有类型信息,最好的做法可能是将指针取消引用到内存中的随机未知位/字节,并且希望不会导致非法内存引用崩溃。

添加的注释:

如果你知道的类型是合法的目标C的对象,那么你也许可以查询关于类等附加信息的运行,但不是整数,双打,等等。