关于NSString非常奇怪的问题

For*_*est 1 iphone objective-c nsstring

这个函数的一个非常奇怪的行为,

void* getNSString(const NSString* str){

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

return;
}
Run Code Online (Sandbox Code Playgroud)

然后

NSLog(@"%@",getNSString(@"test"));
Run Code Online (Sandbox Code Playgroud)

结果将是

This is new test
Run Code Online (Sandbox Code Playgroud)

如果取消注释

NSString* str1 = @"so strange test";
Run Code Online (Sandbox Code Playgroud)

我的理解是没有返回任何内容,所以应该为NULL,为什么打印出那些字符串?

然后结果将是

so strange test
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 10

我不相信没有任何回报.我相信这是不确定的.换句话说,任何东西都可以归还.

在这种情况下,看起来它正在返回发生在给定位置的堆栈上的任何内容.这恰好是你修改或创建的字符串之一,但我可以向你保证这是一个幸运的事故(或者不幸,因为崩溃可能会更好).

如果您不想返回任何内容,则需要更改:

void* getNSString(const NSString* str){
Run Code Online (Sandbox Code Playgroud)

至:

void getNSString(const NSString* str){
Run Code Online (Sandbox Code Playgroud)

  • 完全正确.您也应该收到编译器警告. (5认同)