Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c/cpp中向函数传递指针?_C++_C_Pointers - Fatal编程技术网

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

C++ 如何在c/cpp中向函数传递指针?,c++,c,pointers,C++,C,Pointers,我想传递一个指向函数的指针。 假设我正在创建一个结构并声明一个指向该结构的指针。我给那个指针分配内存,然后我想把那个指针传递给一个函数,这样我就可以对那个内存块做一些事情了。我是如何做到这一点的?c/cpp中的结构与所有其他类型类似。您可以在对int执行操作时使用&和*。这与传递普通变量的方式相同。您不应该认为指针与变量有任何不同,因为指针是一个变量,尽管有点特殊 假设您有一个整数和指向该整数的指针: int a = 0; int * ptr = &a; 请注意,ptr和a都是变量,在

我想传递一个指向函数的指针。
假设我正在创建一个结构并声明一个指向该结构的指针。我给那个指针分配内存,然后我想把那个指针传递给一个函数,这样我就可以对那个内存块做一些事情了。我是如何做到这一点的?

c/cpp中的结构与所有其他类型类似。您可以在对int执行操作时使用&和*。

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

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

int a = 0;
int * ptr = &a;
请注意,ptr和a都是变量,在本例中,我们使用reference操作符&引用a by&a,它给出了a的地址-这是指向a的指针

现在假设您有两个功能:

void foo(int i){}
void bar(int * p){} 
现在这两个函数没有做相同的事情,但是一个取int,一个取指向int的指针,int*。如果调用fooa和modifiedi,则会在函数体中修改i,但对a没有影响。如果调用barptr并使用解引用运算符*修改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,尽管您可能希望避免这样做,直到您完全理解发生了什么,并克服了指针的困难

希望这能让你对正在发生的事情有一些了解,尽管这篇文章给出了比我能提供的更深入的讨论


这将是一个很好的练习,创建一些小程序,在打印结果以帮助理解在哪里发生了什么的同时,处理指针和常规类型。您应该记住,要分配指针,您需要使用new或malloc,否则将出现SEGFAULT错误。当引用一个声明的变量时,这不是一个问题,正如我在上面对&a所做的那样,因为在作出声明(如int a)时,内存已经分配。指针的声明为该指针分配内存,而不是它指向的内存。这最终会导致堆栈和堆之间的差异,尽管在您彻底理解指针之前,我不会考虑这一点。

展示您所做的尝试,以便我们能够提供帮助,以及如何传递变量?指针不是一个变量吗?当你调用printfmt时,一些字符串;您已向函数传递了两个指针。你是怎么做到的?继续做吧……我们使用的方法可能是重复的,在某种程度上,&on int是完全不同的。此外,这并没有告诉OP如何按照要求将指针传递到函数中。@Aristotel没有问题!就拿着指针玩玩吧。如果你遇到错误或意想不到的事情,不要太烦恼——把它当作一次学习经历吧!您应该从中吸取的主要内容是,指针只是直接访问内存的奇特变量。在使用Java等语言时,几乎所有东西都是指针,即使该部分对您是隐藏的。