【发布时间】:2019-09-22 23:08:20
【问题描述】:
我正在用 C 语言编写一个共享对象 (.so),我想将指向数组的指针传递给程序,并将指向不同数组的指针传回调用函数。
我的主要签名是:
int main(int argc, char **argv)
但是,我想传入一个指向数组的指针,而在 C 中,它并没有像函数在其他一些语言中的工作方式那样完成——例如,function(*data)。
我的问题是:
如何传入数组指针?
如何将数组指针传回?
我是 C 新手(来自其他语言)。我已经研究了一段时间,所有示例都显示从主函数以外的内部函数传递和返回指针。我看到的有用的研究表明,不可能从 main 返回指针,但是有没有办法在共享对象中动态分配(malloc)内存并将其返回给调用者?
感谢您对此的任何帮助。
【问题讨论】:
-
库没有
main。只需像使用任何其他函数一样在库中定义函数并直接调用该函数。 -
我只是预感到它与众不同,所以我才开始研究它的这方面。谢谢你的评论;我确认共享对象是不同的。
-
例如将函数声明为
extern "C" int returnsint() {,然后您可以从库中加载它们。我不确定它是否需要,但最好指定调用约定,如extern "C" int __stdcall returnsint() {,这将允许以不同编译器和语言编译的应用程序也可以使用这个库。 -
谢谢,@Havenard -- 我们在 Linux 中使用 stdcall 吗?我以为那只是 Windows。
-
好点。在this related question 中,他们建议将关键字声明为空,因此调用约定应默认为
__cdecl,我很确定这是一回事。