IPhone SDK - Как определить тип переменной (с плавающей или двойной)? - PullRequest
1 голос
/ 01 октября 2010

Как определить, является ли переменная float, double, int и т. Д.?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 01 октября 2010

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
} 

Итак, как вы можете видеть, тип фиксируется при объявлении переменной (также вы заметите, что все переменные должны быть объявлены, то есть вы не можете просто внезапно начать использовать имя новой переменной, если вы не объявили ее сначала).

0 голосов
/ 01 октября 2010

В скомпилированном языке на основе C (вне режима отладки с символами) вы не можете «обнаружить» любую переменную, если вы не знаете тип, или, возможно, не угадываете тип и не везете.

Так что обычно вы знаете и объявляете тип перед любой ссылкой на переменную.

Без информации о типе лучшее, что вы можете сделать, это разыменовать указатель на случайные неизвестные биты / байты в памяти и, надеюсь, не потерпеть крах при неправильной ссылке на память.

Добавлен комментарий:

Если вы знаете, что тип является допустимым объектом Objective C, то вы можете запросить во время выполнения дополнительную информацию о классе и т. Д. Но не о целых, двойных и т. Д.

0 голосов
/ 01 октября 2010

Используйте sizeof. Для двойного это будет 8. Это 4 для поплавка. двойной х = 3,1415; float y = 3.1415f; printf («размер x равен% d \ n», sizeof (x)); printf («размер y равен% d \ n», sizeof (y));

...