Apa perbedaan antara panggilan berdasarkan nilai, panggilan dengan alamat dan panggilan dengan referensi di bawah fungsi topik di C ++?


Jawaban 1:

PANGGILAN DENGAN NILAI:

Dalam panggilan berdasarkan nilai, nilai asli tidak dapat diubah. Ketika Anda meneruskan nilai ke fungsi itu disimpan secara lokal oleh parameter fungsi di lokasi memori tumpukan. Jika Anda mengubah nilai parameter fungsi, itu diubah hanya untuk fungsi saat ini dan itu tidak akan berpengaruh di luar fungsi saat ini dan itu tidak mengubah nilai variabel di dalam fungsi pemanggil.

#termasuk 
menggunakan namespace std;

batal swap_number (int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}

int main ()
{
int a = 1111, b = 0000;
swap (a, b); // melewatkan nilai-nilai.
cout << "nilai a:" << a << "nilai b:" << b;
}

PANGGILAN OLEH REFERENSI:

Metode panggilan dengan referensi menyalin referensi (alamat) argumen ke parameter. Di dalam fungsi, referensi digunakan untuk mengakses argumen aktual yang digunakan dalam panggilan. Itu berarti bahwa jika parameter berubah, nilai-nilai di luar fungsi juga berubah dengan itu karena argumen aktual dan formal keduanya berbagi ruang alamat yang sama di memori.

#termasuk 
menggunakan namespace std;

membatalkan swap_numbers (int * a, int * b) // pointer
{
int temp;
temp = * a;
* a = * b;
* b = temp;
}

int main ()
{
int a = 1111, b = 0000;
tukar (& a, & b); // melewati referensi (alamat).
cout << "nilai a:" << a << "nilai b:" << b;
}

Jawaban 2:

saya akan menulis prototipe masing-masing fungsi

1)

int fun (int a, int b)

{

// panggil dengan nilai

di sini argumen fungsi disalin dalam nilai sementara a, b;

// Anda tidak dapat menukar data asli atau operasi apa pun pada data ini (a, b) akan

tidak tercermin pada data asli

}

int fun (int & a, int & b)

{

// panggil dengan referensi

// di sini Anda mengirimkan variabel secara langsung dengan nama yang berbeda semua perubahan

pada data a, b akan direfleksikan kembali ke variabel utama

}

int fun (int * p1, int * p2)

{

// panggil dengan alamat

di sini Anda melewati alamat lokasi bukan variabel yang dapat Anda akses

variabel menggunakan * p1

}


Jawaban 3:

Dalam panggilan dengan nilai, kami meneruskan nilai ke fungsi sebagai parameter, tetapi dalam panggilan dengan referensi, kami meneruskan alamat nilai tersebut ke fungsi sebagai parameter.

Contoh panggilan dengan refrence: -

membatalkan swap (int * a, int * b);

membatalkan main ()

{

int x, y;

cout << "Masukkan nos untuk bertukar \ n";

cin >> x >> y;

tukar (& x, & y);

getch ();

}

membatalkan swap (int * a, int * b)

{

int temp;

temp = * a;

* a = * b;

* b = temp;

cout << * a << * b;

}

Contoh panggilan berdasarkan nilai: -

membatalkan swap (int a, int b);

membatalkan main ()

{

int x, y;

cout << "Masukkan nos untuk bertukar \ n";

cin >> x >> y;

swap (x, y);

getch ();

}

membatalkan swap (int * a, int * b)

{

int temp;

temp = a;

a = b;

b = temp;

cout << a << b;

}