GNU/Linux >> Belajar Linux >  >> Linux

Tutorial Pemrograman Linux C Bagian 8 - Call by Value Vs Call by Pointer/Alamat

Di bagian pertama dari seri tutorial yang sedang berlangsung ini, kami membahas secara singkat tentang fungsi, termasuk deklarasi dan isi mereka. Apa yang tidak kami diskusikan saat itu adalah berbagai cara di mana fungsi dipanggil. Disini, pada tutorial kali ini kita akan membahas secara singkat cara-cara yang ada.

Dalam bahasa C, Anda dapat memanggil fungsi dalam beberapa cara:memanggil berdasarkan nilai dan memanggil dengan penunjuk atau alamat. Mari kita bahas kedua konsep ini dengan beberapa contoh yang mudah dipahami.

Katakanlah Anda ingin menulis program yang menukar dua nilai. Berikut cara melakukannya:

#include <stdio.h>

int main()
{
int a=0, b=0, c=0;

printf("Enter two integer values\n");

scanf("%d %d",&a,&b);

printf("Entered values are: %d and %d", a,b);

c = a;
a = b;
b = c;

printf("\nSwapped values are: %d and %d", a,b);



return 0;
}

Berikut adalah output dari kode ini dengan nilai yang dimasukkan sebagai 5 dan 9:

Enter two integer values
5 9

Entered values are: 5 and 9
Swapped values are: 9 and 5

Sekarang, misalkan persyaratannya adalah memiliki fungsi terpisah - katakan 'swap' - yang melakukan semua pekerjaan terkait swapping dan dapat dipanggil kapan pun programmer ingin menukar dua nilai. Berikut adalah kode yang melakukan ini:

#include <stdio.h>

void swap (int val1, int val2)
{
int temp = 0;

temp = val1;
val1 = val2;
val2 = temp;

printf("\nSwapped values are: %d and %d", val1,val2);

}

int main()
{
int a=0, b=0;

printf("Enter two integer values\n");

scanf("%d %d",&a,&b);

printf("Entered values are: %d and %d", a,b);

swap(a,b);

return 0;
}

Jadi begitulah. Fungsi terpisah bernama 'swap' telah dibuat yang menerima dua nilai (awalnya dimasukkan oleh pengguna dan ditangkap dalam fungsi 'utama') sebagai argumen dan kemudian menukarnya dan mencetak hasilnya.

Cara 'swap' dipanggil di sini dikenal sebagai 'call by value'. Alasannya, saat panggilan dilakukan, hanya nilai yang dipegang oleh 'a' dan 'b' yang diteruskan ke fungsi 'swap' sebagai argumen. Nilai-nilai ini diterima oleh argumen 'val1' dan 'val2', dan pada variabel inilah proses swap dilakukan.

Ini berarti bahwa variabel 'a' dan 'b' dalam fungsi 'utama' terus mempertahankan nilai aslinya bahkan setelah operasi swap dilakukan. Tetapi bagaimana jika persyaratannya adalah memiliki nilai 'a' dan 'b' yang ditukar setelah memanggil fungsi 'swap'? Nah, di sinilah metode 'call by pointer/address' muncul.

Jadi pada dasarnya apa yang kami lakukan di sini adalah, kami meneruskan alamat variabel (seperti 'a' dan 'b' dalam kasus kami) sebagai argumen. Fungsi yang disebut ('swap' dalam hal ini) dilengkapi untuk menerima alamat sebagai argumen dan kemudian proses swap dilakukan pada nilai yang disimpan di alamat ini, yang secara efektif berarti nilai variabel asli ('a' dan 'b' di sini ) ditukar.

Sekarang, di paragraf sebelumnya, kami mengatakan fungsi "dilengkapi untuk menerima alamat sebagai argumen." Nah, dengan "dilengkapi", yang kami maksud adalah tipe argumen khusus yang dapat menerima alamat. Argumen ini adalah variabel tipe 'penunjuk'. Kita akan membahas 'pointer' secara mendetail dalam tutorial yang akan datang, tetapi untuk saat ini, perlu diingat bahwa variabel pointer menyimpan alamat memori sebagai nilai.

Berikut cara pointer ke integer dideklarasikan/didefinisikan:

int *x;

Jadi pada dasarnya, x adalah variabel pointer yang dapat digunakan untuk menyimpan alamat memori dari variabel integer. Misalkan 'i' adalah variabel integer, maka berikut ini cara membuat 'x' menyimpan alamat 'i':

x = &i;

Dan setiap kali Anda ingin mengakses nilai 'i' melalui 'x', Anda menulis '*x'. Misalnya, berikut cara mengubah nilai 'i' menjadi, katakanlah, 10:

*x = 10;

Jadi dengan mengingat semua ini, inilah cara Anda dapat memanggil 'swap' menggunakan metode panggilan dengan alamat atau pointer:

#include <stdio.h>

void swap (int *val1, int *val2)
{
int temp = 0;

temp = *val1;
*val1 = *val2;
*val2 = temp;

}

int main()
{
int a=0, b=0, c=0;

printf("Enter two integer values\n");

scanf("%d %d",&a,&b);

printf("Entered values are: %d and %d", a,b);

swap(&a,&b);

printf("\nSwapped values are: %d and %d", a,b);


return 0;
}

Jadi kali ini, alih-alih meneruskan nilai 'a' dan 'b' sebagai argumen, kami meneruskan alamat variabel ini. Dalam fungsi 'swap', alamat diterima dalam dua variabel pointer ('val1' dan 'val2'). Dan menggunakan dua variabel pointer, logika secara langsung menukar nilai 'a' dan 'b'.

Berikut outputnya:

Enter two integer values 
6 8
Entered values are: 6 and 8
Swapped values are: 8 and 6

Artikel ini seharusnya memberi Anda setidaknya ide dasar tentang cara pemanggilan fungsi 'panggilan berdasarkan nilai' dan 'panggilan dengan alamat/penunjuk', dan kapan mereka dapat digunakan. Cobalah contoh yang kami cantumkan di sini dan beri tahu kami di komentar di bawah jika Anda memiliki keraguan atau pertanyaan.


Linux
  1. Tutorial Pemrograman C Bagian 5 - Variabel karakter

  2. Tutorial Pemrograman Linux C Bagian 10 - Lingkup Variabel

  3. Tutorial Pemrograman Linux C Bagian 9 :String

  1. Tutorial Pemrograman Linux C Bagian 8 - Call by Value Vs Call by Pointer/Alamat

  2. Tutorial Pemrograman Linux C Bagian 8 - Call by Value Vs Call by Pointer/Alamat

  3. Tutorial Pemrograman Linux C Bagian 14 - Contoh praktis operator Bitwise

  1. Tutorial Kali Linux Burp Suite

  2. Tutorial Pemrograman Linux C Bagian 12 - Operator Penugasan dan Ekspresi Bersyarat

  3. Tutorial Pemrograman Linux C Part 11 - Operator Aritmatika, Relasional, dan Logika