2010-10-01 53 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的對象,那麼你也許可以查詢關於類等附加信息的運行,但不是整數,雙打,等等。