gpt4 book ai didi

c - C 函数中的变量参数

转载 作者:行者123 更新时间:2023-11-30 20:10:38 25 4
gpt4 key购买 nike

我读过有关可变参数函数“int func(int, ...)”的内容。这些函数的参数在哪里分配(堆栈或堆)?

因为我读到va_end()宏释放了分配给va_list的空间,所以“释放”这个词引起了我的注意。

注意:我知道常规函数会进入堆栈,但这种类型的函数很有趣,因为参数的数量未知。

我只是想确定它不像没有预定义空间的数组;我们在最后使用 malloc()free()

链接:https://www.tutorialspoint.com/cprogramming/c_variable_arguments.htm

最佳答案

本身没有指定“堆”或“堆栈”之类的东西,因此编程标准且可移植 ,您应该更好地考虑 的类别标准:静态、自动、动态存储。

尽管如此,在典型的实现中,“自动存储”翻译为“堆栈用于它”。函数参数就是这种情况,可变参数函数也不异常(exception)。

va_end() 可能释放一些动态存储(通常:在堆上分配)的原因是 va_arg() 宏通常需要一些上下文信息来查找下一个参数。 va_start() 将为该信息分配内存(不是为参数本身),并以某种方式初始化它,以便第一个 va_arg() 调用返回第一个可变参数。

请注意,va_start() 的实现不必须分配内存。 va_list 的定义方式可能是为所需的上下文信息提供空间。但是,作为程序员,您应该对此毫无兴趣,所有 va_* 内容对您来说都是一个黑匣子,并且如果文档指出“完成清理后调用 va_end()”,您只需执行即可;)

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

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