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);
}
函数.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
并分配像*previous = current;
这样的"新"上一个,但我仍然遇到seg错误。
我使用的库是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);
}
函数.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*
,但它只是语义上的。
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 修改函数中的指针(将另一个指针作为参数传递)
- 将成员函数指针作为参数传递给模板方法
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 将函数指针数组中的函数指针作为模板参数传递
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 如何将指针变量作为引用参数传递?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- Qt5 - 如何将"QList<T> *"指针作为信号参数传递,并在完成后将其删除?
- C++将指向成员的指针作为模板参数传递
- 通过引用函数传递指针参数是什么意思?
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- 将函数指针作为函数参数传递的目的
- 将派生类作为参数传递给方法,该方法是具有智能指针的基类
- 使用 C++11 将指向成员函数的指针作为参数传递
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 在一行中将默认类型值上的指针作为参数传递
- 将双指针作为参数传递给需要引用 std::vector <double>的函数