ios - 指针传递 Objective C 或 C 语法

标签 ios objective-c c

我有一个方法,它接受以下参数。

void callAMethood(const void *iVar){}

现在我不清楚我应该怎么指点

下面看起来很简单,我只是传递地址而不是值。

NSString *a=@"Hi";
callAMethood(&a);

但是,下面的似乎工作得很好,但理解语法很困难。

char const * const a="HI";
callAMethood(&a);

甚至这样也可以 callAMethood(a);

最佳答案

正如 xlc 所指出的,两者都是错误的。

NSString *a=@"Hi";
callAMethood(&a); // This passes a NSString **


char const * const a="HI";
callAMethood(&a); // This passes a char const * const *

两者都有效,因为指向指针的指针仍然可以转换为 void *

不过,您不太可能有意。

利用 C 在编译时进行类型检查的优势,并使您的类型更加具体。

void awesome_function(NSString *amazingString);

NSString *yay = @"oh my god yes";
awesome_function(yay); // ok
awesome_function(&yay); // compiler error

简而言之:除非您有充分的理由使用 void *(我认为对于 Cocoa(Touch) 应用来说不太可能),否则不要这样做。

如果您不想进行编译时类型检查,请使用 Python 之类的工具。如果您希望能够处理不同的 Objective C 对象类型,这就是 id 的用途。

关于ios - 指针传递 Objective C 或 C 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078054/

相关文章:

ios - 通过在 ios sdk 中添加行来格式化 UITextView 的目的

c - 在 C 中添加 0101 和 5 背后的逻辑是什么?

c++ - Tizen 的母语是什么?

objective-c - Objective-C : How to resolve Leak in Code (results from Instrument)

ios - 为什么-setNeedsLayout -layoutsubviews方法之后立即执行

iphone - 像在 iPhone SMS 应用程序中一样实现添加联系人

ios - 应用程序在 iOS 9 上卡在启动屏幕中且没有错误

ios - 找不到 Facebook.h

ios - 在不停止音乐播放的情况下在 iOS 上录制音频

使用变量转换 C 结构体