gpt4 book ai didi

c - C 中函数的默认参数 --

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:28 24 4
gpt4 key购买 nike

我是初学者,如果我违反了任何规则,我深表歉意。这是我的问题。

我在 Codeblocks 上使用 GCC 编译器,我注意到一段特定的代码有一些特别之处。我希望有人能对此有所了解。

int main()
{
Tree *t;
//some operations on the tree
traverse();// No parameter is passed here.
...
}

void traverse(Tree *t)
{
..
}

在下面的代码中,函数 traverse() 正确执行。我的问题是为什么?我对此不确定,但如果未声明函数,其默认类型将变为 int。现在,编译器不仅抑制了编译时的错误,还正确地将参数“t”提供给函数 traverse()。

这是因为智能编译器设计吗?

总的来说:我的问题是 - 如果编译器遇到尚未声明的方法,它会默认采取什么行为?更重要的是,它如何“知道”我想传递哪个参数?

如您所知,我可以拥有三个“Tree *”实例:t1、t2 和 t3。那么编译器会通过哪一个?

我试着在谷歌上四处寻找,但还没有找到明确的来源。

感谢您的宝贵时间。 :)

最佳答案

函数正在栈上寻找它的参数。该函数并不知道它期望的参数实际上并不存在。

碰巧,它在堆栈中寻找参数的地方是 main() 函数中的局部变量 t。如果 main() 中有更多的局部变量,那么其中之一会被误解为函数的参数,事情就会变得很糟糕。

所以,它的工作纯粹是偶然的。

关于c - C 中函数的默认参数 --,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13478819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com