提问人:StigOlov 提问时间:4/13/2023 最后编辑:StigOlov 更新时间:4/13/2023 访问量:42
如何在不使用相同变量名称的情况下将值从一个主函数传递到另一个函数的新变量上?
How are values passed onto new variables from a main function to another function without using the same variable names?
问:
我是编码新手,所以请耐心等待。
我目前正在尝试了解函数之间的流程和相互作用。我了解我们如何调用函数、在函数之间传递参数和获取返回值等的基础知识。
然而,在解构实践问题的解决方案以计算拆分账单时,要求用户在 main 函数中以浮点数的形式输入,这些浮点变量被命名为
bill_amount
tax_percent
tip_percent
在函数中,为了计算账单并拆分它,我们使用了其他名为
bill
tax
tip
在运行调试器以了解发生了什么时,我可以看到“计算”函数中使用的这些变量是如何分配变量值的,以及我们通过用户在 main 函数中的输入获得的。bill_amount
tax_amount
tip_percent
所以我的问题是:
C 如何知道将值从我们的 main 函数中的变量传递给 calculate 函数?例如,在没有明确指示程序这样做的情况下传递给变量的值?tax_percent
tax
该程序运行良好,我尝试在谷歌上搜索以了解其工作原理,但没有成功。
答:
C 如何知道将值从我们的 main 函数中的变量传递给 calculate 函数?例如,“tax_percent”中的值被传递给变量“tax”,而没有明确指示程序这样做?
按订单。名称无关紧要 - 第一个参数被传递给第一个参数,依此类推。
例如,这个声明:
int func(int, double, char);
匹配以下函数定义:
int func(int units, double weight_per_unit, char price_set)
{
如果你想进一步研究它在后台是如何工作的(例如,当这个代码运行时,内存和寄存器中实际发生了什么),你要找的搜索词是“调用约定”,维基百科页面并不是一个糟糕的起点:https://en.wikipedia.org/wiki/X86_calling_conventions
赋值 like 是设置为值的指令。x = a;
x
a
给定一个定义为 的函数,函数调用类似于 的指令是:void foo(int x, int y);
foo(a, b);
- 开始执行 。
foo
- 将 of 设置为 的值。
x
foo
a
- 将 of 设置为 的值。
y
foo
b
- 继续执行 。
foo
在典型的 C 实现中,这样做的方式是:
- 计算时,和 的值存储在指定用于将参数传递给函数的位置,通常是某些 CPU 寄存器或硬件堆栈上的某些位置。
foo(a, b)
a
b
- 如果编译器为函数生成的机器指令需要 和 的值,则它们从放置参数值的位置获取它们。
foo
x
y
评论