Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

C++ Panggilan dengan Referensi:Menggunakan pointer [Dengan Contoh]

Panggilan C++ dengan Referensi:Menggunakan pointer [Dengan Contoh]

Dalam tutorial ini, kita akan belajar tentang panggilan C++ dengan referensi untuk meneruskan pointer sebagai argumen ke fungsi dengan bantuan contoh.

Dalam tutorial Fungsi C++, kita belajar tentang meneruskan argumen ke suatu fungsi. Metode yang digunakan ini disebut passing by value karena nilai sebenarnya yang dilewatkan.

Namun, ada cara lain untuk meneruskan argumen ke fungsi di mana nilai sebenarnya dari argumen tidak diteruskan. Sebagai gantinya, referensi ke nilai dilewatkan.

Misalnya,

// function that takes value as parameter

void func1(int numVal) {
    // code
}

// function that takes reference as parameter
// notice the & before the parameter
void func2(int &numRef) {
    // code
}

int main() {
    int num = 5;

    // pass by value
    func1(num);

    // pass by reference
    func2(num);

    return 0;
}

Perhatikan & di void func2(int &numRef) . Ini menunjukkan bahwa kita menggunakan alamat variabel sebagai parameter kita.

Jadi, ketika kita memanggil func2() fungsi di main() dengan melewatkan variabel num sebagai argumen, kita sebenarnya melewatkan alamat num variabel, bukan nilai 5 .


Contoh 1:Melewati referensi tanpa pointer

#include <iostream>
using namespace std;

// function definition to swap values
void swap(int &n1, int &n2) {
    int temp;
    temp = n1;
    n1 = n2;
    n2 = temp;
}

int main()
{

    // initialize variables
    int a = 1, b = 2;

    cout << "Before swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    // call function to swap numbers
    swap(a, b);

    cout << "\nAfter swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    return 0;
}

Keluaran

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

Dalam program ini, kami melewatkan variabel a dan b ke swap() fungsi. Perhatikan definisi fungsi,

void swap(int &n1, int &n2)

Di sini, kami menggunakan & untuk menunjukkan bahwa fungsi akan menerima alamat sebagai parameternya.

Oleh karena itu, kompiler dapat mengidentifikasi bahwa alih-alih nilai aktual, referensi variabel diteruskan ke parameter fungsi.

Dalam swap() fungsi, parameter fungsi n1 dan n2 menunjuk ke nilai yang sama dengan variabel a dan b masing-masing. Oleh karena itu pertukaran terjadi pada nilai aktual.

Tugas yang sama dapat dilakukan dengan menggunakan pointer. Untuk mempelajari tentang pointer, kunjungi C++ Pointer.


Contoh 2:Melewati referensi menggunakan pointer

#include <iostream>
using namespace std;

// function prototype with pointer as parameters
void swap(int*, int*);

int main()
{

    // initialize variables
    int a = 1, b = 2;

    cout << "Before swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    // call function by passing variable addresses
    swap(&a, &b);

    cout << "\nAfter swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}

// function definition to swap numbers
void swap(int* n1, int* n2) {
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

Keluaran

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

Di sini, kita bisa melihat outputnya sama seperti contoh sebelumnya. Perhatikan barisnya,

// &a is address of a
// &b is address of b
swap(&a, &b);

Di sini, alamat variabel dilewatkan selama pemanggilan fungsi daripada variabel.

Karena alamat yang diberikan alih-alih nilai, operator dereferensi * harus digunakan untuk mengakses nilai yang disimpan di alamat tersebut.

temp = *n1;
*n1 = *n2;
*n2 = temp;

*n1 dan *n2 memberikan nilai yang disimpan di alamat n1 dan n2 masing-masing.

Sejak n1 dan n2 berisi alamat a dan b , apapun dilakukan untuk *n1 dan *n2 akan mengubah nilai sebenarnya dari a dan b .

Oleh karena itu, ketika kami mencetak nilai a dan b di main() fungsi, nilainya diubah.


Bahasa C

  1. C# menggunakan
  2. Operator C++
  3. Komentar C++
  4. Template Kelas C++
  5. C Pointer
  6. C++ Pointer dengan Contoh
  7. 13 Berbagai Jenis Malware Pada Tahun 2021 [Dengan Contoh]
  8. 5 Berbagai Jenis Pusat Data [Dengan Contoh]
  9. 8 Berbagai Jenis Teknologi Di Tahun 2021 [Dengan Contoh]
  10. C - Pointer