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

1 syntax pointers objective-c

有什么区别

char *foo
Run Code Online (Sandbox Code Playgroud)

(char *) foo
Run Code Online (Sandbox Code Playgroud)

在Objective-C?

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

Car*_*rum 6

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

void function(char *foo)
Run Code Online (Sandbox Code Playgroud)

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

你的另一个表达也有几个解释.第一个是方法定义,类似于上面的函数声明:

- (void)method:(char *)foo
Run Code Online (Sandbox Code Playgroud)

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

- (char *)foo
Run Code Online (Sandbox Code Playgroud)

另一个案例是一个类型转换:

void *foo;
char *bar = (char *)foo;
Run Code Online (Sandbox Code Playgroud)

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

编辑:

对于您的特定示例:

@interface Worker: NSObject
{
    char *foo;
}
Run Code Online (Sandbox Code Playgroud)

此示例声明了一个名为的实例变量foo.它有类型char *.

- initWithName:(char *)foo
Run Code Online (Sandbox Code Playgroud)

此示例声明一个实例方法,该方法采用一个名为footype的参数char *.