我想传递一个指向函数的指针。 假设我正在创建一个结构并声明一个指向该结构的指针。我为该指针分配内存,然后我想将该指针“传递”给一个函数,这样我就可以对该内存块执行操作。我该怎么做?
最佳答案
它的完成方式与传递普通变量相同。您不应该认为指针与变量有任何不同,因为指针就是一个变量(尽管有点特殊)。
假设你有一个整数和一个指向该整数的指针:
int a = 0;
int * ptr = &a;
请注意,ptr
和 a
都是变量,在本例中,我们使用引用运算符 &
来引用 a
by &a
给出了 a
的地址——这是一个指向 a
的指针。
现在假设您有两个函数:
void foo(int i){}
void bar(int * p){}
现在这两个函数做同样的事情(什么都不做),但是一个函数接受一个 int
,另一个函数接受一个指向 int
的指针,int *
.如果调用 foo(a)
并修改了 i
,则 i
将在函数体中被修改,但对 a 没有影响
。如果您调用 bar(ptr)
并使用取消引用运算符 *
修改 ptr
指向的值,如 *ptr = 1
,它将修改 ptr
指向的值,在本例中为 a
。
在您的情况下,传递struct
是一样的。假设你有一个结构
struct MyStruct { int b; };
还有另外两个功能
void structFoo(struct MyStruct m) {}
void structBar(struct MyStruct * mp) {}
您可以按照与上面的 int
和 int *
函数相同的方式处理指针,尽管您现在还必须通过取消引用来访问结构体组件带有 (*mp).b
的结构体,或简写版本 mp->b
。
为了便于使用,您可能还需要执行类似的操作
typedef struct MyStruct MyStruct;
这将允许您使用 MyStruct
作为类型名称,而不是像上面的函数那样要求 struct MyStruct
,尽管您可能希望避免这样做,直到您完全了解了解正在发生的事情并通过指点解决困难。
希望这能让您了解正在发生的事情,尽管 C++ tutorial on pointers提供了比我所能提供的更深入的讨论。
创建一些小程序并使用指针和常规类型,同时打印结果以帮助了解发生的情况,这将是一个很好的练习。您应该记住,要分配指针,您需要使用 new
或 malloc()
,否则您将得到 SEGFAULT
> 错误。当引用像我上面使用 &a
所做的那样声明的变量时,这不是问题,因为在进行诸如 int a
之类的声明时内存已经分配。指针的声明为该指针分配内存,但不分配它指向的内存。这最终导致了堆栈和堆之间的差异,尽管在您对指针有非常透彻的理解之前我不会考虑这一点。
关于c++ - 如何将指针传递给c/cpp中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30512391/