Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Hubungan antara kaedah lulus parameter fungsi C++ dan fungsi parameter berubah

Hubungan antara kaedah lulus parameter fungsi C++ dan fungsi parameter berubah

WBOY
WBOYasal
2024-04-13 08:30:01702semak imbas

Kaedah hantaran parameter fungsi termasuk hantaran nilai, hantaran rujukan dan hantaran penunjuk Fungsi parameter boleh ubah hanya boleh lulus dalam parameter melalui hantaran penunjuk, kerana fungsi perlu mengetahui alamat bahagian parameter berubah. Sebagai contoh, fungsi sum() menggunakan ... untuk menerima bilangan argumen yang tidak diketahui, dan kemudian menggunakan makro va_arg() untuk mendapatkan nilai argumen variadic.

C++ 函数参数传递方式与可变参数函数的关系

Hubungan antara kaedah lulus parameter fungsi C++ dan fungsi parameter berubah

Dalam C++, parameter fungsi boleh dihantar ke dalam fungsi melalui nilai, rujukan atau penuding. Kaedah hantaran yang berbeza ini mempunyai kesan yang ketara ke atas tingkah laku parameter dalam fungsi, dan juga mempengaruhi penggunaan fungsi variadik.

Kaedah lulus parameter fungsi

  • Harus nilai: Salinan parameter dihantar ke dalam fungsi dan sebarang pengubahsuaian pada salinan tidak akan menjejaskan pembolehubah luaran.
  • Lulus melalui rujukan: Alamat parameter dihantar ke dalam fungsi, dan pengubahsuaian pada parameter akan menjejaskan pembolehubah luaran secara langsung.
  • Hantaran penunjuk: Alamat parameter dihantar ke dalam fungsi dan penunjuk boleh digunakan untuk mengubah suai pembolehubah luaran atau mengakses ahli pembolehubah luaran.

Fungsi variadik

Fungsi variadik membenarkan fungsi menerima bilangan parameter yang tidak diketahui. Mereka menggunakan sintaks khas ... untuk menunjukkan bahagian variadic. ... 来指示可变参数部分。

函数声明:

int sum(int count, ...);

函数调用:

int result = sum(3, 1, 2, 3);

传递方式与可变参数函数的关系

对于可变参数函数,只能使用指针传递参数,因为函数必须知道可变参数部分的地址。因此,可变参数函数的参数总是以 指针传递 的方式传入函数。

实战案例

以下代码展示了如何使用可变参数函数计算数字的总和:

#include <cstdarg>
#include <iostream>

int sum(int count, ...) {
  va_list args; // 可变参数列表
  va_start(args, count); // 初始化可变参数列表,count 为固定参数

  int sum = 0;
  for (int i = 0; i < count; i++) {
    sum += va_arg(args, int); // 获取可变参数,将其转换为 int
  }

  va_end(args); // 清理可变参数列表

  return sum;
}

int main() {
  // 调用可变参数函数
  int result = sum(3, 1, 2, 3);
  std::cout << result << std::endl; // 输出结果
}

此代码中,sum() 函数使用指针方式传递可变参数 ...,并使用 va_arg()

Pengisytiharan fungsi: 🎜rrreee🎜Panggilan fungsi: 🎜rrreee🎜🎜Hubungan antara kaedah pemindahan dan fungsi parameter berubah🎜🎜🎜Untuk fungsi parameter berubah, anda hanya boleh menggunakan penunjuk untuk menghantar parameter, kerana fungsi mesti mengetahui alamat bahagian parameter berubah . Oleh itu, parameter fungsi variadik sentiasa dihantar ke dalam fungsi sebagai 🎜penunjuk melepasi🎜. 🎜🎜🎜Kes praktikal🎜🎜🎜Kod berikut menunjukkan cara menggunakan fungsi parameter pembolehubah untuk mengira jumlah nombor: 🎜rrreee🎜Dalam kod ini, fungsi sum() menggunakan penunjuk untuk menghantar pembolehubah parameter... dan gunakan makro va_arg() untuk mendapatkan nilai argumen variadic. 🎜

Atas ialah kandungan terperinci Hubungan antara kaedah lulus parameter fungsi C++ dan fungsi parameter berubah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn