2010-12-21 31 views
1

有關此功能很奇怪的行爲很奇怪的問題,有關的NSString

void* getNSString(const NSString* str){ 

str = @"This is new test"; 
//NSString* str1 = @"so strange test"; 

return; 
} 

然後

NSLog(@"%@",getNSString(@"test")); 

其結果將是

This is new test 

如果取消註釋

NSString* str1 = @"so strange test"; 

我的理解是什麼都沒有返回,所以應該是NULL,爲什麼要打印出那些字符串?

那麼結果將是

so strange test 

回答

10

我不相信沒有返回。我相信它沒有定義。換句話說,任何東西都可以被返回。

在這種情況下,它看起來像返回在給定位置堆棧上發生的任何事情。這恰好是你修改或創建的字符串之一,但我可以向你保證這是一個幸運的事故(或者不幸,因爲崩潰可能會更好)。

如果你想返回什麼,你需要改變:

void* getNSString(const NSString* str){ 

到:

void getNSString(const NSString* str){ 
+5

絕對正確的。你也應該得到一個關於這個的編譯器警告。 – 2010-12-21 08:01:27

+0

經過反思,您可能想要添加到此答案的一件事是** undefined **完全不同** ** nothing **。指定返回的函數將始終返回一些內容。根據結構,它有時可能是'無',但即使'無'也是。 – 2010-12-21 18:54:16

0

可可/目標C不這樣....我也面臨這個問題類型之前,

例如:

-(NSObject*) someMethod() 
{ ... 

    NSString* result [email protected]"some value"; 
    // because too busy ,I just forgot write the return statement during dev :) 
} 

雖然沒有像上面的代碼返回,但應用程序還可以返回的結果值....

,這是非常有趣的....