指针作为C中的函数参数

雪莱尔贝克

如果要使用此代码,例如:

int num = 5;
int *ptr = #

以下两个功能有什么区别?

void func(int **foo);
void func(int *foo); 

我在哪里调用该函数:

func(&ptr); 

我意识到两者中的前者将指向指针的指针作为参数,而第二者仅接收指针。

如果传递了func(&ptr),则实际上是传递了一个指针。指针指向另一个指针有什么区别?

我相信后者会发出不兼容的警告,但是只要您知道自己在做什么,细节似乎并不重要。似乎出于可读性和理解的考虑,前者是一个更好的选择(2星指针),但是从逻辑的角度来看,有什么区别?

阿特

一个合理的经验法则是,您不能完全更改传递给呼叫者看到更改的确切方式。解决方法是传递指针。

按值传递: void fcn(int foo)

按值传递时,您将获得该值的副本。如果您更改函数中的值,则无论您进行的更改如何,调用方仍会看到原始值。

通过指针传递给价值: void fcn(int* foo)

通过指针传递给您指针的副本-它指向与原始指针相同的内存位置。该存储位置是存储原始文件的位置。这使您可以更改指向的值。但是,您不能将实际的指针更改为数据,因为您仅收到了指针的副本。

将指针传递给值指针: void fcn(int** foo)

通过将指针传递给值的指针,可以解决上述问题。如上所述,您可以更改该值,以便调用者可以看到更改,因为它与调用者代码使用的存储位置相同。出于相同的原因,您可以将指针更改为该值。这使您可以执行诸如在函数内分配内存并返回内存之类的事情。&arg2 = calloc(len);您仍然无法将指针更改为指针,因为那是您收到的副本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++函数指针作为Doxygen中的参数

来自分类Dev

指针数组作为c函数中的参数

来自分类Dev

C将指针作为函数中的参数传递

来自分类Dev

成员函数指针的decltype作为c ++ 11中的模板参数

来自分类Dev

数组和指针在c中作为函数参数的区别

来自分类Dev

成员函数指针的decltype作为c ++ 11中的模板参数

来自分类Dev

作为参数传递时,在函数中更新指针地址。[将指针作为C中的引用传递]

来自分类Dev

函数指针作为Java 8中的参数

来自分类Dev

指向函数的C ++指针作为参数

来自分类Dev

函数指针作为参数的C ++问题

来自分类Dev

指向函数的C ++指针作为参数

来自分类Dev

C ADT函数指针作为参数?

来自分类Dev

c ++类方法指针作为函数参数

来自分类Dev

如何处理C中可变参数函数中作为参数传递的空指针

来自分类Dev

如何处理C中可变参数函数中作为参数传递的空指针

来自分类Dev

如何接受带有任意数量参数的函数的指针(作为C中的参数)并调用它?

来自分类Dev

如何在C中调用具有函数指针作为参数的函数?

来自分类Dev

双指针作为C中的参数

来自分类Dev

指针作为C ++中的模板参数

来自分类Dev

什么时候将指针作为参数传递给C ++中的函数?

来自分类Dev

将指向2D VLA的指针作为函数参数传递给C中的行向量

来自分类Dev

函数指针作为SLOT参数

来自分类Dev

指针作为函数参数的麻烦

来自分类Dev

整数指针作为函数的参数

来自分类Dev

双指针作为函数的参数

来自分类Dev

如何从C#访问以指针作为输入参数的C ++函数

来自分类Dev

使用C ++ 11智能指针作为C函数参数

来自分类Dev

函数指针作为类方法声明中的参数

来自分类Dev

函数指针作为类方法声明中的参数

Related 相关文章

热门标签

归档