传递给函数的变量是否存储在连续的内存位置中?

时间:2018-08-04 21:32:39

标签: c parameter-passing calling-convention memory-layout contiguous

我写了这个小功能:

SEQ

是否确保包含select q.*, ( select seq from tab where expire_date = q.expdate1 and id = q.id ) as seq1, ( select seq from tab where expire_date = q.expdate2 and id = q.id ) as seq2 from ( select id, min(expire_date) as expdate1, max(expire_date) as expdate2 from tab group by id ) q; ID EXPDATE1 EXPDATE2 SEQ1 SEQ2 ------ --------------------- --------------------- ------ ------ 849123 2011-03-12 12:19:11.0 2017-02-16 11:19:11.0 134228 424128 443121 2011-03-12 12:39:16.0 2017-02-19 11:42:12.0 133228 424828 int mayor(int n1, int n2, int n3, int n4, int n5) {    int mayor = n1;    for(int *p=&n2; p<=&n5; ++p)            mayor = *p;    return mayor; } 的内存块是连续的?既然我希望得到期望的返回值,所以希望如此,但是我想知道这是否安全。

2 个答案:

答案 0 :(得分:8)

不。变量甚至不必在内存中-它们可以(全部或仅一部分)保存在寄存器中。

所以您的假设是错误的。如果要将它们放在连续的内存块中,则需要自己将它们放置在其中。

int mayor(int n1, int n2, int n3, int n4, int n5) 
{
  int parameters[5] = {n1,n2,n3,n4,n5};

答案 1 :(得分:-1)

传递给函数c的参数(除非它们是指针)存储在堆栈或寄存器中。决定是由程序加载程序动态分配。

如果您打算将它们作为连续的位置进行管理并使用循环,请使用这些元素启动一个数组。