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

时间:2014-01-28 18:31:02

标签: c++ c pointers

我正在使用一个库,我需要将一个对象的指针发送给一个函数..问题是我需要更改这个指针指向函数本身的内容,我真的不知道我是怎么做的可以克服这个问题,因为指针是按值传递的。

struct.cpp

struct MyStruct {
    Node* previous;
    ...
};

的main.cpp

int main(...) {
    MyStruct* m = new MyStruct;
    m->previous = NULL;
    ...
    while (traversing) {
        library_function((AFUNPTR) myFunction, (void*) m->previous);
    }

function.cpp

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 ..我试过使用{{1并分配像Node** previous这样的“新”,但我仍然遇到了一个段错误。

我正在使用的库是Intel-PIN,我正在尝试检测一条指令并将它们链接到一个图形中,尽管我从示例中删除了所有PIN,因为我认为这是一般c ++问题?


这是我尝试使用指针指针...

struct.cpp

*previous = current;

的main.cpp

struct MyStruct {
    Node** previous;
    ...
};

function.cpp

int main(...) {
    MyStruct* m = new MyStruct;
    *(m->previous) = NULL;
    ...
    while (traversing) {
        library_function((AFUNPTR) myFunction, (void*) m->previous);
    }

1 个答案:

答案 0 :(得分:0)

C:

int main(...) {
    MyStruct* m = new MyStruct;
    m->previous = NULL;
    ...
    while (traversing) {
        library_function((AFUNPTR) myFunction, &m->previous);
    }

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

void*

在这里,您可以将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**,但它只是语义。