指针参数与指针返回值

2024-10-01 09:15:43 发布

您现在位置:Python中文网/ 问答频道 /正文

当我将一些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结合使用


Tags: 模块程序awsincludetools指向modulepyobject
1条回答
网友
1楼 · 发布于 2024-10-01 09:15:43

在参数示例中,它是一个局部变量,因此调用函数中的值不会更改。你知道吗

如果你做了一个参数示例,取一个指向指针的指针,并相应地修复其余部分,那么调用函数的值就会改变,它就会工作。你知道吗

相关问题 更多 >