我正在使用一个库,我需要将一个对象的指针发送给一个函数..问题是我需要更改这个指针指向函数本身的内容,我真的不知道我是怎么做的可以克服这个问题,因为指针是按值传递的。
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);
}
答案 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**
,但它只是语义。