【问题标题】:How to pass and return a pointer from main in C如何在C中从main传递和返回指针
【发布时间】:2019-09-22 23:08:20
【问题描述】:

我正在用 C 语言编写一个共享对象 (.so),我想将指向数组的指针传递给程序,并将指向不同数组的指针传回调用函数。

我的主要签名是:

int main(int argc, char **argv)

但是,我想传入一个指向数组的指针,而在 C 中,它并没有像函数在其他一些语言中的工作方式那样完成——例如,function(*data)。

我的问题是:

  1. 如何传入数组指针?

  2. 如何将数组指针传回?

我是 C 新手(来自其他语言)。我已经研究了一段时间,所有示例都显示从主函数以外的内部函数传递和返回指针。我看到的有用的研究表明,不可能从 main 返回指针,但是有没有办法在共享对象中动态分配(malloc)内存并将其返回给调用者?

感谢您对此的任何帮助。

【问题讨论】:

  • 库没有main。只需像使用任何其他函数一样在库中定义函数并直接调用该函数。
  • 我只是预感到它与众不同,所以我才开始研究它的这方面。谢谢你的评论;我确认共享对象是不同的。
  • 例如将函数声明为extern "C" int returnsint() {,然后您可以从库中加载它们。我不确定它是否需要,但最好指定调用约定,如extern "C" int __stdcall returnsint() {,这将允许以不同编译器和语言编译的应用程序也可以使用这个库。
  • 谢谢,@Havenard -- 我们在 Linux 中使用 stdcall 吗?我以为那只是 Windows。
  • 好点。在this related question 中,他们建议将关键字声明为空,因此调用约定应默认为__cdecl,我很确定这是一回事。

标签: c pointers


【解决方案1】:

传入和传出数组:

int arr[6];

void putarr(int x[6])
{
    memcpy(arr, x, sizeof(arr));
}

void *getarr(void)
{
    return arr;
}

如果你真的想将一个指向数组的指针传出去(这和数组是一样的,但是比较麻烦),使用这个函数:

void (*getarr_p(void))[6]
{
    return &arr;
}

【讨论】:

    猜你喜欢
    • 2016-12-28
    • 2014-12-28
    • 2020-02-08
    • 1970-01-01
    • 2015-07-18
    • 2019-05-03
    • 2022-01-11
    • 2019-11-07
    • 2013-04-03
    相关资源
    最近更新 更多