我刚开始学习Objective-C,来自VB .Net和C#.Net背景.我理解指针用法,但在Objective-C示例中,我看到星号放在几个不同的地方,并尽可能搜索,我无法找到答案为什么会这样.我尝试的每一次搜索都会出现关于指针的各种解释(我真的不需要),但没有提到星号不同位置的原因/影响.以下是我见过的一些例子:
NSString *string; NSString * string; (NSString *) string; NSString* string;
星号的这些不同位置是什么意思?我确信这是一个简单的答案,但到目前为止,无法在任何Apple教程和参考文档或在线中找到它是令人沮丧的.
有人可以结束我的痛苦并回答这个令人困惑的问题吗?谢谢!
没有区别,但是你应该知道只有第一个"令牌"(可以这么说)定义了类型名称,而*不是类型名称的一部分.也就是说:
NSString *aString, bString;
创建一个指针-TO- NSString
,和一个NSString
.要使两者成为指针,请执行以下任一操作:
NSString *aString, *bString;
要么:
NSString *aString; NSString *bString;
1. NSString *string; 2. NSString * string; 3. (NSString *) string; 4. NSString* string;
1,2和4完全相同.这都是风格.选择你想要的任何东西,或混合起来.
选择#3还有另一个含义,它用于铸造.例如:
t = (NSString *)string ;
将string
转换为NSString
指针.
但是选择#3是您可能在.h文件或.m文件中的函数定义中使用的语法.在实际函数内部,在"运行"的代码中,它具有不同的含义.
没有区别 - 这是一种风格问题.它们都声明了一个变量,称为string
指向NSString的指针.括号在某些情况下(特别是方法声明)是必要的,以便澄清它是一种类型声明.
你把星号放在哪里都没关系,所有语句都创建NSString类型的指针.
当在一行中使用多个变量名时,您必须为每个变量编写星号.
NSString * nsstring, * nsstring2;
1. NSString *string; 2. NSString * string; 3. (NSString *) string; 4. NSString* string;
1,2和4是等价的.C语言(和C的Objective-C超集)指定对空白区域不敏感的语法.因此,您可以根据自己的喜好自由添加空间.所有相关的语法由非空白字符分隔(例如{
,}
,;
等)[1].
3是一个类型转换(告诉C编译器使用该NSString*
类型而不管声明的类型string
.在Objective-C中,很少需要类型转换对象实例.你可以使用id
类型作为可以引用任何对象实例的变量类型.
在方法声明中,语法3(有时没有结束分号)用于声明方法参数的类型.Objective-C方法可能如下所示:
- (void)myMethodThatTakesAString:(NSString*)string;
在此声明中,名为的参数string
类型为type NSString*
(前导-
表示实例方法与类方法相对).具有多个参数的方法声明可能如下所示:
- (void)myMethodTakingAString:(NSString*)string andAnInteger:(NSInteger)intParam;
[1]这与使用空格作为块分隔符的Python等语言进行了比较.
没有区别,*
放在指针声明中的位置是无关紧要的.