c++ - 如何将指针传递给c/cpp中的函数?

标签 c++ c pointers

我想传递一个指向函数的指针。 假设我正在创建一个结构并声明一个指向该结构的指针。我为该指针分配内存,然后我想将该指针“传递”给一个函数,这样我就可以对该内存块执行操作。我该怎么做?

最佳答案

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

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

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

请注意,ptra 都是变量,在本例中,我们使用引用运算符 & 来引用 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) {}

您可以按照与上面的 intint * 函数相同的方式处理指针,尽管您现在还必须通过取消引用来访问结构体组件带有 (*mp).b 的结构体,或简写版本 mp->b

为了便于使用,您可能还需要执行类似的操作

typedef struct MyStruct MyStruct;

这将允许您使用 MyStruct 作为类型名称,而不是像上面的函数那样要求 struct MyStruct ,尽管您可能希望避免这样做,直到您完全了解了解正在发生的事情并通过指点解决困难。

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

创建一些小程序并使用指针和常规类型,同时打印结果以帮助了解发生的情况,这将是一个很好的练习。您应该记住,要分配指针,您需要使用 newmalloc(),否则您将得到 SEGFAULT > 错误。当引用像我上面使用 &a 所做的那样声明的变量时,这不是问题,因为在进行诸如 int a 之类的声明时内存已经分配。指针的声明为该指针分配内存,但不分配它指向的内存。这最终导致了堆栈和堆之间的差异,尽管在您对指针有非常透彻的理解之前我不会考虑这一点。

关于c++ - 如何将指针传递给c/cpp中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30512391/

相关文章:

c - extern C 中的字符串数组

java - Java 和内存中的指针

C++ 将文件权限添加到 Zip 文件

c++ - 复制文本文件的更好方法是什么?

c - Shmget : Invalid argument. 为什么我得到这个错误?

c - 无效声明 (2)

使用 malloc 的连续内存块

c - 运行时内存

c++ - 沿对角线编程 0

c++ - 在解析相同的参数时,有时会出现段错误