指针参数与指针返回值

时间:2017-12-15 20:08:54

标签: python c++ pointers parameter-passing return-value

当我将一些python代码嵌入到我的C ++程序中并尝试导入python模块并获取指向它的指针时,我有两个选择:

传递空指针作为参数:

void importPyModule(PyObject * modPtr, const char *modName){
    modPtr = PyImport_ImportModule(modName);

    if(modPtr == nullptr){
        std::cout << "python module: " << modName << " import failed\npython message: ";
        PyErr_Print();
        std::exit(1);
    }
}

或者返回一个指针:

PyObject *importPyModule(const char *modName){
    PyObject *modPtr = PyImport_ImportModule(modName);

    if(modPtr == nullptr){
        std::cout << "python module: " << modName << " import failed\npython message: ";
        PyErr_Print();
        std::exit(1);
    }
}

为了完整性,这就是我调用我的功能的地方:

#include "Python.h"
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <iomanip>

int main(){

    initPython(); // initialize the interpreter and set appropriate paths
    PyObject *aws_tools, *boto, *imp, *sdb;

    // Option 1: return pointer
    aws_tools = importPyModule("aws_tools");
    // Or option 2: pass a pointer
    importPyModule(aws_tools, "aws_tools");

    /* Some other code */

    return 0;
}

当我将指针作为参数传递时,我得到一个指向:

的指针
<unknown at [some address]>

但是当我指针从函数返回一个值时,我得到:

<module at [some address]>

指向模块的指针将正常工作,而指向未知的指针将使程序崩溃。

我的问题是:有没有更好的方法来完成这项工作(比使用指针?)

造成这种行为差异的原因是什么?

我正在使用g ++与c ++ 11标准和python2.6

1 个答案:

答案 0 :(得分:0)

在您的参数示例中,它是一个局部变量,因此调用函数中的值不会发生变化。

如果您使用参数示例获取指向指针并相应地修复其余部分,那么调用函数的值将会被更改,并且它将起作用。