簡體   English   中英

C ++更改作為函數參數傳遞的指針值

[英]c++ changing a pointers value that's passed as a function parameter

我在一個庫中工作,我需要向該函數的對象發送指針。問題是我需要更改該指針在函數本身中指向的內容,我真的不知道該如何克服這個問題。問題,因為指針是按值傳遞的。

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;
}

我的問題是我需要遍歷所有節點,但是這種方式會將前一個一直發送到指向NULL myFunction 。.我試圖使用Node** previous並分配“ new”上一個,例如*previous = current; 但我仍然遇到段錯誤。

我正在使用的庫是Intel-PIN,並且盡管我已將示例中的所有PIN剝離掉了,因為我認為這是一個通用的c ++問題,但我正在嘗試插入一條指令並將它們鏈接成圖形。


這是我對指針的嘗試...

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)->memberFunc();
        ...
    }
    *previous = current;
}

C:

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

在這里,通過指針傳遞m->previous (指針的類型為Node** ,可以將其重新解釋為void*然后返回而不會丟失任何內容。該函數期望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** )。 它被重新解釋為void* ,但這只是語義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM