Разница между char * foo и (char *) foo в Objective-C - PullRequest
1 голос
/ 18 марта 2010

В чем разница между

char *foo

и

(char *) foo

в Objective-C?

Вот пример для обоих сценариев: 1. @interface Worker: NSObject { char *foo; } 2. - initWithName:(char *)foo

Ответы [ 2 ]

6 голосов
/ 18 марта 2010

Ваше первое выражение может появиться в двух местах. Первый как определение переменной. Само по себе char *foo определяет переменную - указатель на char с именем foo. В контексте определения функции он определяет тип одного из параметров функции:

void function(char *foo)

Объявляет функцию, которая принимает один аргумент char * и указывает, что на этот аргумент будет ссылаться имя foo в контексте функции.

Есть также пара объяснений для вашего другого выражения. Первое относится к определению метода, которое похоже на объявление функции выше:

- (void)method:(char *)foo

Объявляет метод экземпляра, принимающий один аргумент, в данном случае типа char * и с именем foo. Может также отображаться как тип возвращаемого значения метода:

- (char *)foo

Другой случай, как тип:

void *foo;
char *bar = (char *)foo;

В этом случае выражение typecets foo из пустого указателя на указатель char и присваивает значение bar.

Edit:

Для ваших конкретных примеров:

@interface Worker: NSObject
{
    char *foo;
}

В этом примере объявляется переменная экземпляра с именем foo. Он имеет тип char *.

- initWithName:(char *)foo

В этом примере объявляется метод экземпляра, принимающий один параметр с именем foo типа char *.

1 голос
/ 18 марта 2010
+ (char*) foo; // "static" function returning a variable of type char*
- (char*) foo; // member function returning a variable of type char*


// ...
{
    // ...
    char* foo; // variable of type char*
    // ...
}
// ...

EDIT

- (void) whatever: (char*)foo; // member function, with 
                               // parameter foo of type char*

// ...
{
    // ...
    char* bar = (char*) foo; // casting variable foo to type char* 
    // ...
}
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...