2010-12-21 29 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 :) 
} 

虽然没有像上面的代码返回,但应用程序还可以返回的结果值....

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