有什么区别
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
您的第一个表达式可以出现两个位置.第一个是变量定义.它本身char *foo
就是定义一个变量 - 一个指向char
named 的指针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)
此示例声明一个实例方法,该方法采用一个名为foo
type的参数char *
.