一个变量通常具有名字、地址、值、类型、生存期、作用域等属性,其中,变量地址也称为变量的左值 (l-value)。

将实参的左值传递给形参

在函数调用中,将实参的左值传递给形参意味着将实参的内存地址传递给形参。这意味着形参可以访问实参所指向的内存位置,并对其进行修改。这种传递方式被称为“引用传递”。

例如,以下代码中,函数 swap 将两个整数变量的值进行交换。实参 ab 的左值被传递给形参 xy,因此 swap 函数可以修改 ab 的值。

void swap(int &x, int &y) {
  int temp = x;
  x = y;
  y = temp;
}

int main() {
  int a = 10;
  int b = 20;
  swap(a, b);
  printf("a = %d, b = %d\n", a, b);
  return 0;
}

将实参的右值传递给形参

将实参的右值传递给形参意味着将实参的值复制给形参。形参将拥有实参值的一个副本,对形参的修改不会影响实参的值。这种传递方式被称为“值传递”。

例如,以下代码中,函数 add 将两个整数相加。实参 ab 的值被传递给形参 xy,因此 add 函数不会修改 ab 的值。

int add(int x, int y) {
  return x + y;
}

int main() {
  int a = 10;
  int b = 20;
  int sum = add(a, b);
  printf("sum = %d\n", sum);
  return 0;
}

总结

  • 将实参的左值传递给形参意味着形参可以修改实参的值。
  • 将实参的右值传递给形参意味着形参不会修改实参的值。

注意:

  • 不同的编程语言可能对实参传递机制有不同的实现方式。
  • 在某些情况下,即使是值传递,形参也可以通过指针或引用访问实参所指向的内存位置,从而间接修改实参的值。
变量属性与左值:详解变量地址、实参传递机制

原文地址: https://www.cveoy.top/t/topic/zKL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录