【发布时间】:2013-09-12 22:43:45
【问题描述】:
如果我有这个代码,例如:
int num = 5;
int *ptr = #
以下两个函数有什么区别?
void func(int **foo);
void func(int *foo);
我在哪里调用函数:
func(&ptr);
我意识到两者中的前者将一个指向指针的指针作为参数,而第二个只接受一个指针。
如果我传入func(&ptr),我实际上是在传入一个指针。指针指向另一个指针有什么区别?
我相信后者会给出一个不兼容的警告,但看起来细节并不重要,只要你知道你在做什么。似乎为了可读性和理解前者是更好的选择(2星指针),但从逻辑的角度来看,有什么区别?
【问题讨论】:
-
花几个小时阅读一本好的 C 编程书籍。 (我们不能在几分钟内教你)。还可以阅读一些关于Computer Architecture 和x86 calling conventions 的网页
-
我了解指针是什么以及它们是如何工作的,我只是想问为什么将指针传递给指针或将指针传递给 int 很重要;两个参数都是指针。无论如何,感谢您的链接。下面的答案很好。
-
@sherrellbc 嘿,两者都是指针,对。但它们指向哪里,那里又是什么?
-
这没有意义。您定义了两个具有相同名称的不同函数,
func(),一行接一行。那是一个编译器错误,所以你不能传递任何东西,因此之后的一切都是无稽之谈。 [这是一条故意开玩笑的评论,目的是让 sherrellbc 思考为什么人们在提出问题时使用明显的速记方式--以及在回答时]。 ;) -
嘿,好久没听到了 :P 所以你最终会接受答案吗?虽然很高兴看到,当有人在接受答案之前需要一些时间以便将一组有价值的问题聚集在一起时,现在 2 年已经足够了,你不也是这么想的吗? :P 你的个人资料告诉我们,你甚至可以再次查看并考虑采取哪一个;)
标签: c pointers parameters parameter-passing