当前位置:  开发笔记 > 编程语言 > 正文

在Objective-C中放置星号

如何解决《在Objective-C中放置星号》经验,为你挑选了6个好方法。

我刚开始学习Objective-C,来自VB .Net和C#.Net背景.我理解指针用法,但在Objective-C示例中,我看到星号放在几个不同的地方,并尽可能搜索,我无法找到答案为什么会这样.我尝试的每一次搜索都会出现关于指针的各种解释(我真的不需要),但没有提到星号不同位置的原因/影响.以下是我见过的一些例子:

NSString *string;
NSString * string;
(NSString *) string;
NSString* string;

星号的这些不同位置是什么意思?我确信这是一个简单的答案,但到目前为止,无法在任何Apple教程和参考文档或在线中找到它是令人沮丧的.

有人可以结束我的痛苦并回答这个令人困惑的问题吗?谢谢!



1> dcrosta..:

没有区别,但是你应该知道只有第一个"令牌"(可以这么说)定义了类型名称,而*不是类型名称的一部分.也就是说:

NSString *aString, bString;

创建一个指针-TO- NSString,和一个NSString.要使两者成为指针,请执行以下任一操作:

NSString *aString, *bString;

要么:

NSString *aString;
NSString *bString;


...当然你不能声明一个不是指针的NSString变量(在POC方言之外),所以第一个代码示例不会编译.
`NSString*aString,bString`会创建两个指向NSStrings的指针吗?

2> marcc..:
1.  NSString *string;
2.  NSString * string;
3.  (NSString *) string;
4.  NSString* string;

1,2和4完全相同.这都是风格.选择你想要的任何东西,或混合起来.

选择#3还有另一个含义,它用于铸造.例如:

t = (NSString *)string ;

string转换为NSString指针.

但是选择#3是您可能在.h文件或.m文件中的函数定义中使用的语法.在实际函数内部,在"运行"的代码中,它具有不同的含义.


如果从NSObject开始并转换为多种不同类型,则需要显式转换为NSString.

3> Chuck..:

没有区别 - 这是一种风格问题.它们都声明了一个变量,称为string指向NSString的指针.括号在某些情况下(特别是方法声明)是必要的,以便澄清它是一种类型声明.


然而,我更喜欢最后一种形式(来自C++背景):它清楚地划分了类型和对象.以下是Stroustrup对此主题的一个很好的讨论:http://www.research.att.com/~bs/bs_faq2.html#whitespace

4> knittl..:

你把星号放在哪里都没关系,所有语句都创建NSString类型的指针.

当在一行中使用多个变量名时,您必须为每个变量编写星号.

NSString * nsstring, * nsstring2;


......这是C中最丑陋的东西之一,因此应该避免.

5> Barry Wark..:
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等语言进行了比较.



6> John Milliki..:

没有区别,*放在指针声明中的位置是无关紧要的.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有