2010-05-29 44 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