每个场景的'x'值是多少?

时间:2013-12-11 23:54:57

标签: c arrays pass-by-reference pass-by-value

我有以下类似C的程序,我试图在以下时间计算出数组x的最终值:

  • 参数x按值传递。
  • 参数x通过引用传递。
  • 参数x由value-result传递。

CODE:

void swap(int[] list, int i, int j)
{
    int temp = list[i];
    list[i] = list[j];
    list[j] = temp;
}

void main() 
{
    int x[3] = {5, 2, 4};
    swap(x, 1, 2);
}

如果我正确地关注,为了传递值,在我们的通话中......

swap(x, 1, 2)
{
    temp = x[1] // temp now equals 2
    x[1] = x[2] // x[1] now equals 4
    x[2] = temp // x[2] now equals 2
}

...那么我们有以下内容,对吗?

x[3] == {5, 4, 2}

编辑:

我尝试在ideone.com上进行编译并收到:

prog.c:1:17: error: expected ‘;’, ‘,’ or ‘)’ before ‘list’
 void swap(int[] list, int i, int j)
                 ^
prog.c:8:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
 void main() 
      ^
prog.c: In function ‘main’:
prog.c:11:5: warning: implicit declaration of function ‘swap’ [-Wimplicit-function-declaration]
     swap(x, 1, 2);
     ^

1 个答案:

答案 0 :(得分:1)

实际上,当你打电话

swap(x, 1, 2);

您正在使用 call-by reference ,因为您传递了参数x,这是一个指针 到数组x的第一个元素。因此,这种交换技术将起作用,你会得到你所期望的,元素现在将按顺序{5,4,2}