首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改作为函数参数传递的指针值的c++

更改作为函数参数传递的指针值的c++
EN

Stack Overflow用户
提问于 2014-01-28 18:31:01
回答 1查看 364关注 0票数 2

我使用的是一个库,在这里我需要将指向对象的指针发送到函数。问题是,我需要改变这个指针在函数本身中指向什么,而且我不知道如何克服这个问题,因为指针是作为值传递的。

struct.cpp

代码语言:javascript
复制
struct MyStruct {
    Node* previous;
    ...
};

main.cpp

代码语言:javascript
复制
int main(...) {
    MyStruct* m = new MyStruct;
    m->previous = NULL;
    ...
    while (traversing) {
        library_function((AFUNPTR) myFunction, (void*) m->previous);
    }

function.cpp

代码语言:javascript
复制
void myFunction(void* node_from_lib, void* point_to_previous) {
    Node* current = (Node*) node_from_lib;
    Node* previous = (Node*) point_to_previous;
    if (previous != NULL) {
        ...
    }
    previous = current;
}

我的问题是,我需要遍历所有的节点,但是以这种方式,前面的内容将一直发送到myFunction中,指向NULL。我尝试使用Node** previous并分配“新的”以前的*previous = current;,但是我仍然有一个seg错误。

我使用的库是Intel-PIN,我试图对指令进行测试,并将它们链接到一个图表中,尽管我已经从示例中去掉了所有的PIN,因为我认为这是一个一般的c++问题。

这是我用指针指向指针的尝试..。

struct.cpp

代码语言:javascript
复制
struct MyStruct {
    Node** previous;
    ...
};

main.cpp

代码语言:javascript
复制
int main(...) {
    MyStruct* m = new MyStruct;
    *(m->previous) = NULL;
    ...
    while (traversing) {
        library_function((AFUNPTR) myFunction, (void*) m->previous);
    }

function.cpp

代码语言:javascript
复制
void myFunction(void* node_from_lib, void** point_to_previous) {
    Node* current = (Node*) node_from_lib;
    Node** previous = (Node**) point_to_previous;
    if ((*previous) != NULL) {
        (*previous)->memberFunc();
        ...
    }
    *previous = current;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-28 19:03:02

C:

代码语言:javascript
复制
int main(...) {
    MyStruct* m = new MyStruct;
    m->previous = NULL;
    ...
    while (traversing) {
        library_function((AFUNPTR) myFunction, &m->previous);
    }

在这里,通过指针传递m->previous (指针的类型为Node**,它可以被重新解释为void*并返回而不会丢失任何东西)。)该函数需要void*。)

代码语言:javascript
复制
function.cpp

void myFunction(void* node_from_lib, void* point_to_previous) {
    Node* current = (Node*) node_from_lib;
    Node* previous = * ((Node**)point_to_previous); // cast for reading - assume point_to_previous is pointer to pointer, and retrieve the pointer
    if (previous != NULL) {
        ...
    }
    previous = current;
    *((Node**)point_to_previous) = previous; // assume, point_to_previous is pointer to pointer, and change the pointer
}

在这里,您可以将void*转换为Node**

在这里,将指针传递给节点指针(Node**)作为第二个参数。它被重新解释为void*,但它只是语义上的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21413894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档