我想传递指向函数的指针。 让我们说我正在创建一个结构并声明一个指向该结构的指针。我将内存分配给该指针,然后我想将该指针“传递”给一个函数,这样我就可以对该内存块进行处理。我是怎么做到的?
答案 0 :(得分:1)
它与传递普通变量的方式相同。您不应该认为指针与变量有任何不同,因为指针是一个变量(虽然有点特殊)。
假设您有一个整数和指向该整数的指针:
int a = 0;
int * ptr = &a;
请注意,ptr
和a
都是变量,在这个例子中,我们使用引用运算符&
来引用a
&a
a
的地址 - 这是指向a
的指针。
现在说你有两个功能:
void foo(int i){}
void bar(int * p){}
现在这两个函数做同样的事情(没有),但是一个接受int
,一个接受指向int
,int *
的指针。如果您致电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提供了比我能提供的更深入的讨论。
创建一些小程序并乱用指针和常规类型,同时打印结果以帮助理解发生了什么,这将是一个很好的练习。您应该记住,要分配指针,您需要使用MyStruct
或struct MyStruct
,否则会出现new
错误。在引用我之前使用malloc()
声明的变量时,这不是问题,因为在发出诸如SEGFAULT
之类的声明时已经分配了内存。指针的声明为该指针分配内存,但不分配它指向的内存。这最终会导致堆栈和堆之间的差异,尽管在你对指针有一个非常透彻的理解之前我不会考虑这个。
答案 1 :(得分:0)
c / cpp中的结构与所有其他类型一样。你可以用&和*当你为int做。