Objective-C中char * foo与(char *)foo之间的区别

时间:2010-03-18 17:12:46

标签: objective-c syntax pointers

之间有什么区别
char *foo

(char *) foo
Objective-C中的

以下是两种情况的示例: 1. @interface Worker: NSObject { char *foo; } 2. - initWithName:(char *)foo

2 个答案:

答案 0 :(得分:6)

您的第一个表达式可以出现两个位置。第一个是变量定义。 char *foo本身定义了一个变量 - 一个指向char的指针foo。在函数定义的上下文中,它定义了函数参数之一的类型:

void function(char *foo)

声明一个函数,它接受一个char *参数,并指示该参数将在函数的上下文中由名称foo引用。

您的另一种表达方式也有一些解释。第一个是方法定义,类似于上面的函数声明:

- (void)method:(char *)foo

声明一个采用单个参数的实例方法,在这种情况下类型为char *并命名为foo。它也可以显示为方法的返回类型:

- (char *)foo

另一个案例是类型转换:

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

在这种情况下,表达式从空指针到foo指针进行类型转换char,并将值赋给bar

编辑:

对于您的具体示例:

@interface Worker: NSObject
{
    char *foo;
}

此示例声明名为foo的实例变量。它的类型为char *

- initWithName:(char *)foo

此示例声明一个实例方法,该方法采用名为foo的{​​{1}}类型的参数。

答案 1 :(得分:1)

+ (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*
    // ...
}
// ...

修改

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

// ...
{
    // ...
    char* bar = (char*) foo; // casting variable foo to type char* 
    // ...
}
// ...