Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我不知道';我对stack有些不了解_C - Fatal编程技术网

我不知道';我对stack有些不了解

我不知道';我对stack有些不了解,c,C,我正在读一篇关于堆栈的文章。但我不理解下面的句子:由于堆栈增长,第一个参数将存储在最低的地址(这种参数反转在历史上用于允许函数传递可变数量的参数) 我的问题是:我认为即使参数没有被存储,我们仍然可以允许传递数量可变的参数。例如,sp=sp-4,然后我们将第一个参数的值推送到堆栈上,然后我们执行另一个sp=sp-4和推第二个参数,依此类推 谢谢 问题是:函数必须知道第一个参数在哪里,而不是有多少个参数 想象一下你有 void fx(int, ...); 及 想象一下,在调用之前,堆栈(按您想要的

我正在读一篇关于堆栈的文章。但我不理解下面的句子:由于堆栈增长,第一个参数将存储在最低的地址(这种参数反转在历史上用于允许函数传递可变数量的参数)

我的问题是:我认为即使参数没有被存储,我们仍然可以允许传递数量可变的参数。例如,
sp=sp-4
,然后我们
将第一个参数的值推送到堆栈上
,然后我们执行另一个
sp=sp-4
推第二个参数
,依此类推


谢谢

问题是:函数必须知道第一个参数在哪里,而不是有多少个参数

想象一下你有

void fx(int, ...);

想象一下,在调用之前,堆栈(按您想要的方向增长)具有“xy”


如果将反向推堆栈将变为“X Y 42-1 2”或“X Y 2 2 42-1 5”,代码很容易拾取第一个参数:堆栈顶部的对象

您完全正确。堆栈的性质无关紧要。请看我对类似问题的回答
fx(2, -1, 42) /* 2 indicates 2 more arguments */;
fx(5, -1, 42, 2, 2, 2);