我有一个代码:
int double(int *x) {
*x = (*x) + (*x);
return *x;
}
int main() {
int i = 10;
int j;
j = double(&i);
printf("i= %d, j = %d\n", i, j);
return 0;
}
输出为i = 20,j = 20。 为什么i的价值会改变?
答案 0 :(得分:2)
因为您将指向i的指针传递给double函数,这允许它更改它的值。这被称为“通过引用传递”。如果你刚刚使用了int而不是指针,那么i的值就不会改变。这被称为“按值传递”。
答案 1 :(得分:0)
i
的输出已更改,因为您已在函数*x = (*x) + (*x);
中写了double
,并使用j = double(&i);
进行了调用,因此它将x = x + x
使用x = 10
,即20
。
如果发送指针,则允许更改int
的内容。
答案 2 :(得分:0)
j = double(&i);
您正在传递i的地址,因此双重功能可以改变它的值。
如果你可以通过,
j = double(i);
i
的价值将保持不变。