【发布时间】:2013-12-30 05:03:16
【问题描述】:
我有以下类似 C 的程序,我试图找出数组 x 的最终值:
- 参数 x 按值传递。
- 参数 x 通过引用传递。
- 参数 x 通过 value-result 传递。
代码:
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);
^
【问题讨论】:
-
编程语言只按值传递值
-
int[] list等于int* list所以你总是将指向数组第一个元素的指针传递给这个函数(不是值,不是引用,而是指针或指针的值,如果你喜欢)跨度> -
如果你通过值传递
x,swap不会改变main中的x,所以它不会从 main 的 POV 做任何事情。 (我假设一些“类似 C”的语言实际上可以按值传递数组) -
你所说的“C-like”是什么意思?在实际的 C 中,数组将在此处通过引用有效地传递,而不是通过值传递。当你传递像这样的数组时,C 实际上传递了一个指向数组第一个成员的指针,而不是数组本身。
-
找出答案的最简单方法是运行代码。
标签: c arrays pass-by-reference pass-by-value