【发布时间】:2019-08-07 05:13:33
【问题描述】:
我正在为 Windows 和 macOS 创建一个用 C 编写的跨平台库,我需要通过引用传递一个变量。如何在 C 中定义函数以便它可以接收通过引用传递的变量,以及如何在 Swift 中调用该函数?
例如,如果我要在我的 C 库中定义一个函数,例如:
int sayBye(const char* greetingString){
greetingString = "bye";
return 0;
}
并在 Swift 中调用它:
var greeting: String = "hello"
let responseCode = sayBye(greeting)
print(greeting)
我希望打印语句输出“再见”。
约束:return 语句中不能返回“bye”。
简而言之,我想在字符串“greeting”通过引用 C 函数后修改其内容。
注意:我不确定在上面的代码中,我是否正确定义了 C 函数,或者我是否在 swift 中正确调用它,我愿意接受建议。
【问题讨论】:
-
迂腐提示:C 没有传递引用
-
C 函数是完全按值传递的。没有传递引用。如果您希望函数能够更改调用者的局部变量,则必须为其提供指向该变量的指针。不知道如何在 Swift 中做到这一点。
-
您的代码的问题在于,C 并不真正支持按引用传递,您必须通过将指针传递给您想要的变量来模拟它通过引用传递。对于指针变量,这意味着您必须将指针 传递给指针。代码如图所示,由于传递给函数的指针是按值传递的,因此赋值只修改了局部变量,即你在函数中的副本。唯一的解决方案是更改指针指向的内存内容,例如
strcpy,如果内容是不变的,这是一种展示停止器。 -
您想修改
const char*的内容吗?你不能。