如何在c / cpp中传递指向函数的指针?

时间:2015-05-28 16:38:24

标签: c++ c pointers

我想传递指向函数的指针。 让我们说我正在创建一个结构并声明一个指向该结构的指针。我将内存分配给该指针,然后我想将该指针“传递”给一个函数,这样我就可以对该内存块进行处理。我是怎么做到的?

2 个答案:

答案 0 :(得分:1)

它与传递普通变量的方式相同。您不应该认为指针与变量有任何不同,因为指针是一个变量(虽然有点特殊)。

假设您有一个整数和指向该整数的指针:

int a = 0;
int * ptr = &a;

请注意,ptra都是变量,在这个例子中,我们使用引用运算符&来引用a &a a的地址 - 这是指向a的指针。

现在说你有两个功能:

void foo(int i){}
void bar(int * p){} 

现在这两个函数做同样的事情(没有),但是一个接受int,一个接受指向intint *的指针。如果您致电foo(a)并修改了i,则会在功能正文中修改i,但不会对a产生任何影响。如果您使用解除引用运算符bar(ptr)调用了ptr并修改了*指向的值,那么它将修改{{1}指向的值在这种情况下,*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; ,尽管您可能希望避免这样做,直到您完全了解正在发生的事情并通过指针有困难。

希望这可以让您了解正在发生的事情,尽管C++ tutorial on pointers提供了比我能提供的更深入的讨论。

创建一些小程序并乱用指针和常规类型,同时打印结果以帮助理解发生了什么,这将是一个很好的练习。您应该记住,要分配指针,您需要使用MyStructstruct MyStruct,否则会出现new错误。在引用我之前使用malloc()声明的变量时,这不是问题,因为在发出诸如SEGFAULT之类的声明时已经分配了内存。指针的声明为该指针分配内存,但不分配它指向的内存。这最终会导致堆栈和堆之间的差异,尽管在你对指针有一个非常透彻的理解之前我不会考虑这个。

答案 1 :(得分:0)

c / cpp中的结构与所有其他类型一样。你可以用&和*当你为int做。