【问题标题】:IPhone SDK - How to detect variable type (float or double)?iPhone SDK - 如何检测变量类型(浮点型或双精度型)?
【发布时间】:2010-10-01 16:43:18
【问题描述】:

如何检测变量是否为浮点、双精度、整数等?

谢谢。

【问题讨论】:

    标签: iphone variables sdk types detect


    【解决方案1】:

    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
    } 
    

    如您所见,在声明变量时类型是固定的(您还会注意到必须声明所有变量,即您不能突然开始使用新变量名,除非您首先声明它)。

    【讨论】:

      【解决方案2】:

      在基于编译的 C 语言中(在带有符号的调试模式之外),您实际上无法“检测”任何变量,除非您知道类型,或者猜测类型并获得好运。

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

      如果没有类型信息,您能做的最好的事情可能是取消引用指向内存中随机未知位/字节的指针,并希望不会因非法内存引用而崩溃。

      添加评论:

      如果您知道该类型是合法的 Objective C 对象,那么您可能能够查询运行时以获取有关该类等的其他信息。但不能查询整数、双精度数等。

      【讨论】:

        【解决方案3】:

        使用 sizeof。对于双倍,它将是 8。对于浮动,它是 4。 双 x = 3.1415; 浮动 y = 3.1415f; printf("x 的大小为 %d\n", sizeof(x)); printf("y 的大小为 %d\n", sizeof(y));

        【讨论】:

        • 这个答案根本不是问题所在,它不允许您区分大小相同的类型。
        猜你喜欢
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        • 2015-02-20
        • 2017-04-09
        相关资源
        最近更新 更多