2010-05-29 33 views
0

指针这是从Mac上学习Objective-C的一个问题...功能在Objective-C的

函数的指针

我输入什么,按配方,是:

NSString *boolString (BOOL yesNo) { 
if (yesNo) { return (@"YES"); 
} else { return (@"NO"); 
} } // boolString 

第一行中的指针星号似乎并不必要,但删除它会导致出现错误消息。但它有什么作用?在

NSString * boolString (yesNo); 

似乎正在进行的是一个函数被定义为一个指向NSString的指针。没有星号的功能

NSLog (@"are %d and %d different? %@", 5, 5, boolString(areTheyDifferent)); 

返回YES或NO的NSString。但是,如果它是一个指针,它怎么能返回一个NSString呢?它可能会返回NSString的ADDRESS;或者如果取消引用,它可以返回该地址的CONTENTS(一个NSString,如YES或NO)。然而我看不到它被解除引用的地方。

+0

下次请格式化您的代码。 – 2010-05-29 03:25:52

回答

0

指针用于函数返回的NSString,而不是函数本身。

+0

对不起,下面的代码格式不好。我会阅读如何尽快做到这一点。 你说这个函数可以正常工作,从一个BOOL值中取出一个字符串,所以使用这个函数作为NSLog的参数会显示返回的字符串。 我仍然想知道为什么使用指针。 可以,之后的模式: \t int foo = 7; (指针指向数字%d \ n“,*指针);指针指向数字%d;指针指向数组% 写了这样的东西?虽然这似乎并不奏效。 \t NSString testString = boolString(BOOL yesNo); int * ptr =&testString; \t NSLog(@ * ptr); – Rich 2010-05-29 15:42:39

+0

具体而言,boolString函数生成一个NSString,然后返回一个指向该NSString的指针。在Objective-C中,所有*对象都是通过指针引用的。当你使用NSLog打印一个NSString时,它需要一个指向NSString的指针。这就是为什么由boolString返回的NSString指针与NSLog一起工作的原因。 – Jeff 2010-05-29 16:17:17

3

该函数返回一个指向NSString对象的指针。在Objective-C中,你几乎不会直接处理对象,只能用指向它们的指针。就你而言,NSString *是你应该始终使用的类型。

+0

对不起,下面的代码格式不好。我会阅读如何尽快做到这一点。 在C++中,像下面这样的东西可以工作: \t NSString testString = boolString(BOOL yesNo); int * ptr =&testString; \t NSLog(@ * ptr); 在Objective-C中,它没有。我没有得到的是, 似乎没有名为(如testString)捕获boolString()返回值的NSString变量; ,也没有命名指针(如ptr)来捕获未命名的NSString变量的地址; 并且由于指针未命名,所以不能解除引用! – Rich 2010-05-29 15:58:15

+0

@很好,没错。在Objective-C中,你只使用指向对象的指针,而不使用对象本身。我相信你会习惯它的。 – 2010-05-29 16:37:46

+0

谢谢 - 我确信我会的。 – Rich 2010-05-30 16:56:06