C 语言按值调用和按引用调用 MCQ 练习题 1

2025年1月29日 | 阅读 6 分钟

1. C 语言中的按引用传递和按值传递的主要区别是什么?

  1. 按引用传递将参数的地址放入形式参数中,而按值传递将相关参数的实际数量复制到复制的参数中。
  2. 与按值传递(将参数的物理地址复制到参数中)相比,按引用传递在形式定义的参数上传递输入参数的实际内容。
  3. 没有改动。
  4. 当函数通过引用调用时,它会阻止更改先前的参数;当通过值调用时,则会。

说明

正确答案是选项 (a)。按值传递会将适当参数的实际数量复制到正在调用的参数中,而按引用传递会将参数的物理地址传递到形式参数中。


2. 在以下选项中,关于 C 语言中的按引用传递,哪个是正确的?

  1. 函数使用初始值。
  2. 函数处理原始值的副本。
  3. 按值传递和按引用传递之间没有区别。
  4. C 语言不支持按引用传递。

说明

正确答案是选项 (a)。函数处理原始值。

在 C 语言中,“按引用传递”的概念是通过指针实现的。当您通过引用将变量传递给函数时,您传递的是变量的内存地址,而不是其值的副本。这允许函数直接访问和修改原始变量。


3. 以下代码的输出是什么?

  1. x = 20, y = 10
  2. x = 10, y = 20
  3. x = 0, y = 0
  4. 编译错误

说明

正确答案是选项 (b)。

在 C 语言中,按值将参数发送给函数是默认行为。它表明在调用 swap 函数时,x 和 y 作为参数,swap 函数会传递上面变量的副本。为了更精确地说,swap (x, y) 在 swapping 函数内部会生成 x 和 y 的局部副本(分别称为 a 和 b)。

在 swap 函数中,会操作 a 和 b 的值。临时变量 temp 用于存储 a 的值,然后将 a 赋值为 b 的值,最后将 b 赋值为存储在 temp 中的值。然而,这些更改仅应用于 swap 函数内的局部副本 a 和 b。由于 swap 函数处理的是副本而不是原始值,因此 main 函数中的原始变量 x 和 y 保持不变。

当 swap 函数执行完毕后,控制权会返回到 main 函数,此时 printf 语句会打印 x 和 y 的值。由于 swap 函数没有改变 x 和 y(因为按值传递的语义),它们的值保持初始化时的状态:x = 10,y = 20。因此,程序的输出是 x = 10,y = 20。


4. 在 C 语言中,实现按引用传递使用什么关键字?

  1. &
  2. *
  3. #
  4. $

说明

正确答案是选项 (b)。在 C 语言中,指针是一项强大的功能,它允许实现按引用传递。* 运算符,称为解引用运算符,用于处理指针。

对于在 C 语言中实现按引用传递所使用的关键字,* 运算符代表了。使用指针进行通信成为一个吸引人的特性,它允许函数修改其超出其各自位置的直接作用域的参数。因此,指针运算符是必需的。当函数被指定接受指针作为参数时,它就能直接操作函数所指向的变量的数值。


5. 按引用传递时,传递给函数的是什么?

  1. 变量的副本
  2. 变量的值
  3. 变量的地址
  4. 以上都不是

说明

正确答案是选项 (c)。按引用传递将变量的地址传递给被调用的函数,而不是仅仅传递变量的副本或其值。这表明函数收到的是指向实际参数所在内存地址的指针,而不是创建变量值的副本供其使用。

C 语言中的 * 运算符表示此指针,它允许函数直接检索和修改原始参数的值。通过使用取地址运算符 (&) 来获取变量的地址并将此地址传递给函数,在函数内对常量进行的任何修改都会在函数外的原始变量中反映出来。


6. 以下哪项是按引用传递的优点?

  1. 节省内存空间。
  2. 确保函数无法修改实际参数。
  3. 允许函数修改原始变量。
  4. 比按值传递更容易实现。

说明

正确答案是选项 (c)。使用按引用传递的主要好处之一是它允许函数直接修改原始变量,当需要将更改反映给调用者时,这一点尤其有用。这种能力是通过将变量的内存地址传递给函数而不是其值的副本来实现的。当函数接收到地址时,它可以利用指针来访问和修改存储在该地址的值。因此,在函数内对变量所做的任何更改都会在函数调用后持续存在,直接影响调用者作用域中的原始变量。


7. 关于 C 语言中的按值传递和按引用传递,以下哪个陈述是正确的?

  1. 按值传递允许函数直接修改调用者的变量。
  2. 按引用传递将变量值的副本传递给函数。
  3. 按值传递涉及将变量的地址传递给函数。
  4. 按引用传递允许函数直接修改调用者的变量。

说明

正确答案是选项 (c)。在 C 语言中,按值传递是将变量值的副本传递给函数,这意味着在函数内的任何修改都不会影响原始变量。反之,按引用传递是将变量的地址传递给函数,从而使函数能够直接访问和修改实际变量。这使得函数能够直接影响调用者作用域中变量的值。


8. 以下哪项是 C 语言中按引用传递的特征?

  1. 它创建实际参数的副本。
  2. 它允许函数修改原始参数。
  3. 它用于防止修改原始参数。
  4. C 语言不支持。

说明

正确答案是选项 (b)。按引用传递通过将变量的地址传递给函数,允许函数修改原始参数。


9. 关于按值传递,以下哪个陈述是正确的?

  1. 在函数内对参数的更改会反映在原始变量中。
  2. 将实际参数值的副本传递给函数。
  3. 函数接收变量的地址。
  4. C 语言不支持按值传递。

说明

正确答案是选项 (b)。按值传递涉及将实际参数值的副本传递给函数。此副本允许函数使用其自己的局部数据副本,而不会影响原始变量。