【问题标题】:Functions as pointers in Objective-CObjective-C中作为指针的函数
【发布时间】:2010-05-29 03:24:04
【问题描述】:

这是一个来自在 Mac 上学习 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;或者如果取消引用,它可以返回该地址的内容(一个 NSString,例如 YES 或 NO)。但是我看不到它被取消引用的地方。

【问题讨论】:

  • 下次请格式化您的代码。

标签: objective-c function-pointers


【解决方案1】:

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

【讨论】:

  • 抱歉以下代码格式不正确;我会尽快了解如何做到这一点。在 C++ 中,类似下面的内容会起作用: NSString testString = boolString (BOOL yesNo); int * ptr = &testString; NSLog (@ *ptr );在 Objective-C 中,它没有。我没有得到的是似乎没有命名的 NSString 变量(如 testString)来捕获 boolString() 返回的值;并且也没有命名指针(如 ptr)来捕获未命名的 NSString 变量的地址;并且由于指针未命名,因此无法取消引用!
  • @Rich,没错。在 Objective-C 中,你只使用指向对象的指针,从不使用对象本身。我相信你会习惯的。
【解决方案2】:

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

【讨论】:

  • 抱歉以下代码格式不正确;我会尽快了解如何做到这一点。您是说该函数正常工作,从 BOOL 值中生成一个字符串,因此使用该函数作为 NSLog 的参数会显示返回的字符串。我仍然想知道为什么要使用指针。我可以在模式之后: int foo = 7; int *指针 = &foo; printf("指针指向数字 %d\n", *pointer);写过这样的东西吗?虽然这似乎不起作用。 NSString testString = boolString (BOOL yesNo); int * ptr = &testString; NSLog(@*ptr);
  • 具体来说,boolString 函数生成一个 NSString,然后返回一个指向该 NSString 的指针。在 Objective-C 中,all 对象是通过指针来引用的。当您使用 NSLog 打印 NSString 时,它需要一个指向 NSString 的指针。这就是 boolString 返回的 NSString 指针与 NSLog 一起使用的原因。
猜你喜欢
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
相关资源
最近更新 更多