Operator apa yang kita gunakan untuk mencari alamat dari suatu variabel?

Pointer digunakan untuk menyimpan alamat suatu variabel dengan type data tertentu. Operator yang bisa digunakan pada variabel pointer adalah penjumlahan dan pengurangan. Operator penjumlahan dan pengurangan tersebut digunakan untuk menggeser alamat pointer. Pointer dideklarasikan dengan menambahkan "*" sebelum nama variabel saat deklarasi variabel. Pointer tidak menyimpan nilai variabel tetapi pointer menyimpan alamat dari variabel.

Untuk lebih memahami tentang penggunaan pointer, ketik program di bawah ini, compile dan jalankan.

#include <stdio.h>

int main(){
unsigned int angka, *penunjuk;
       angka=8;
       penunjuk=&angka;
       printf("nilai variabel angka = %u\n" , angka);
       printf("nilai variabel yang ditunjuk oleh penunjuk = %u\n" , *penunjuk);
       return 0;
}

Operator apa yang kita gunakan untuk mencari alamat dari suatu variabel?

Pointer digunakan untuk menyimpan alamat suatu variabel. Saat kalian menggunakan pointer secara langsung dalam printf, maka yang akan ditampilkan adalah alamat variabel yang ditunjuk. Pada contoh di atas, variabel penunjuk digunakan untuk menyimpan alamat variabel angka.

Untuk menampilkan nilai variabel angka lewat variabel penunjuk, kalian bisa menggunakan tanda asterisk ( * ).

Alamat VS Nilai
Untuk menyimpan alamat suatu variabel ke dalam sebuah pointer kalian harus menambahkan tanda ampersand (&) sebelum nama variabel yang akan disimpan alamatnya oleh pointer. Contoh penggunaan ampersand bisa kalian lihat saat kalian menggunakan scanf. Function scanf membutuhkan tanda ampersand karena yang digunakan scanf adalah alamat variabelnya, dan bukan nilai dari argumennya.

Jika kalian ingin mengubah nilai dari variabel yang alamatnya disimpan oleh pointer, kalian harus menambahkan asterisk(*). Tanpa tanda asterisk, yang akan diubah adalah alamatnya.
#include <stdio.h>


int main(){
unsigned int angka, *penunjuk;
       angka=8;
       penunjuk=&angka;
       //perubahan nilai
       *penunjuk += 2;
       printf("nilai variabel angka = %u\n" , angka);
       printf("alamat variabel angka = %u\n\n", &angka);

       angka = 9;

       printf("nilai variabel yang disimpan variabel penunjuk = %u\n", *penunjuk);
       printf("alamat variabel yang disimpan variabel penunjuk = %u\n\n", penunjuk);
       //pergeseran alamat
       penunjuk +=2;

       printf("alamat yang disimpan penunjuk : %u\n", penunjuk);
       printf("nilai variabel angka : %u\n", angka);
       return 0;
}

Operator apa yang kita gunakan untuk mencari alamat dari suatu variabel?

Pada contoh di atas variabel angka dideklarasikan dengan type data int yang ukurannya 4 byte. Kemudian, variabel angka diberi nilai 8 dan disimpan alamatnya oleh variabel penunjuk. Pernyataan "*penunjuk=10;" digunakan untuk mengubah nilai variabel yang ditunjuk oleh "penunjuk", yaitu variabel. Kalian bisa mengamati perbedaannya dari hasilnya.

Saat kalian melakukan penjumlahan dan pengurangan secara langsung tanpa menyertakan tanda "*" pada pointer, yang kalian ubah adalah alamat yang disimpan pointer bukan nilai variabel yang disimpan. Pergeseran nilai variabel pointer akan dikalikan dengan ukuran type data variabel. Jika ukurannya adalah 4 byte dan variabel pointer ditambahkan dengan 2 maka alamat yang ditunjuk pointer akan bergeser sebanyak 2 x 4 byte atau sama dengan 8 byte.

Jika kalian kurang paham coba ubah setiap angka dalam kode programnya.

Penggunaan Pointer dalam Function

Pointer dapat sangat berguna pada function. Karena jika kita menggunakan pointer pada function yang kita simpan pada parameter adalah alamat dari variabel yang dijadikan argumen, dan bukan nilai dari variabelnya. Saat variabel dijadikan argumen yang disimpan dalam parameter, variabel hanya disalin nilainya. Jika kita mengubah nilai paramater dari dalam function, nilai variabel yang dijadikan argumen saat pemanggilan function tidak akan berubah.

#include <stdio.h>

int pertukaran(int a, int b){ 
int c; 
       c=a; 
       a=b; 
       b=c; 
       return 0; 
} 

int main(){ 
int a, b; 
       a=10; 
       b=12; 
       printf("nilai awal variabel a : %d\n", a); 
       printf("nilai awal variabel b : %d\n", b); 
       pertukaran(a, b); 
       printf("variabel a : %d\n", a); 
       printf("variabel b : %d\n", b);
       return 0;
}

Operator apa yang kita gunakan untuk mencari alamat dari suatu variabel?

Nilai yang diberikan dalam function saat pemanggilan function (atau bisa kita sebut sebagai argumen) tidak akan berubah saat nilai parameter diubah dari dalam function karena parameter cuma variabel baru yang menyimpan nilai variabel yang digunakan saat pemanggilan function. Jika ingin nilai variabel a dan variabel b yang dijadikan argumen berubah, ubah programnya menjadi seperti di bawah ini!


#include <stdio.h>

int pertukaran(int *a, int *b){
int c;
       c=*a;
       *a=*b;
       *b=c;
       return 0;
}

int main(){
int a, b;
       a=10;
       b=12;
       printf("nilai awal variabel a : %d\n", a);
       printf("nilai awal variabel b : %d\n", b);
       pertukaran(&a, &b);
       printf("variabel a : %d\n", a);
       printf("variabel b : %d\n", b);
}

Operator apa yang kita gunakan untuk mencari alamat dari suatu variabel?

Pada contoh di atas, kita menambahkan ampersand(&) pada argumen function saat pemanggilan function. Tanda ampersand (&) menandakan bahwa yang kita inginkan adalah alamat dari variabel, dan bukan nilai yang disimpan. Tanpa tanda &, program akan menghasilkan error.

Nilai variabel a dan b yang digunakan sebagai argumen berubah karena parameter a dan parameter b menggunakan tanda *. Tanda *(asterisk) menandakan bahwa pointer digunakan untuk menunjuk nilainya, dan bukan menunjuk alamatnya. Tanpa tanda *, variabel akan mengganti alamat yang ditunjuk saat diberi nilai dengan tanda sama dengan(=).


Pointer Sama dengan Array?

Pointer bisa menyimpan alamat dari "nilai tunggal" maupun "alamat dari array". Alamat dari variabel tunggal juga bisa kita anggap sebagai array ke-0. Saat pointer digunakan untuk menyimpan alamat array, maka yang akan disimpan adalah indeks array pertama atau array[0].


#include <stdio.h>
int main(){
int a=10;
int b[4]={4, 3, 2, 1};
int *p;
       p=&a;
       printf("Nilai tunggal variabel a: \n");
       printf("nilai awal variabel a = %d\n", p[0]);
       //array
       p=b;
       printf("Array variabel b: \n");
       printf("nilai awal variabel a = %d\n", p[0]);
       printf("nilai awal variabel a = %d\n", p[1]);
       printf("nilai awal variabel a = %d\n", p[2]);
       printf("nilai awal variabel a = %d\n", p[3]);
}

Operator apa yang kita gunakan untuk mencari alamat dari suatu variabel?

Saat menyimpan alamat dari variabel biasa, kita perlu tanda ampersand (&), tapi, saat menyimpan alamat dari array, tanda ampersand (&) tidak diperlukan.

Satu hal yang perlu kalian perhatikan yaitu, alamat variabel array secara keseluruhan tidak sama dengan alamat setiap anggota array. Alamat setiap anggota array tetap dianggap seperti variabel biasa.

Alokasi Memori
Pointer tidak hanya digunakan untuk menunjuk alamat dari suatu variabel yang sudah dideklarasikan dalam program. Pointer juga bisa digunakan untuk menunjuk alamat tertentu di dalam memori yang belum digunakan oleh variabel ataupun program lain. Untuk menggunakan memori tertentu di komputer, kita akan membutuhkan malloc. Function malloc akan membantu kita untuk meminta komputer mengalokasikan memori yang dibutuhkan program dengan ukuran tertentu.

Sebelum membahas tentang cara penggunaan malloc, perhatikan kode program di bawah ini!

#include <stdio.h>
#include <stdlib.h>

int main(){
int jumlah_bilangan;
     printf("Masukkan Jumlah data : ");
     scanf("%d", &jumlah_bilangan);
     return 0;
}

Jika kalian memang sudah paham semua yang saya bahas sebelumnya di blog ini, kalian seharusnya bisa memperkirakan hasil dari kode program di atas.

Program yang dihasilkan kode program di atas hanya meminta bilangan bulat untuk disimpan dalam variabel jumlah data kemudian berhenti setelah penekanan enter. Selanjutnya, mari kita lanjutkan lagi programnya sedikit demi sedikit sambil memahami fungsi setiap baris dalam program!

#include <stdio.h>
#include <stdlib.h>

int main(){
int jumlah_bilangan;
int *data_bilangan;
     printf("Masukkan Jumlah data : ");
     scanf("%d", &jumlah_bilangan);
     data_bilangan=(int*)malloc(sizeof(int)*jumlah_bilangan);
     free(data_bilangan);
     return 0;
}

Operator apa yang kita gunakan untuk mencari alamat dari suatu variabel?

Program melakukan alokasi memori menggunakan fungsi “malloc” untuk variabel “data_bilangan” dengan jumlah data sesuai “jumlah_bilangan”. Kembalian dari fungsi "malloc" jenis / type datanya adalah “void*” sehingga kita harus melakukan “type casting” dari type data void menjadi “int”. Setelah variabel data_bilangan tidak digunakan memori yang digunakan untuk menyimpan data harus dibersihkan dengan fungsi “free”.

Contoh kode program di bawah ini meminta pengguna memasukkan data untuk ditampilkan lagi setelahnya.

#include <stdio.h>
#include <stdlib.h>

int main(){
int jumlah_bilangan;
int *data_bilangan;
     printf("Masukkan Jumlah data : ");
     scanf("%d", &jumlah_bilangan);
     data_bilangan=(int*)malloc(sizeof(int)*jumlah_bilangan);

     *data_bilangan=jumlah_bilangan;

     jumlah_bilangan=10; 

     printf("Jumlah data : %d", *data_bilangan);
     free(data_bilangan);
     return 0;
}

Operator apa yang kita gunakan untuk mencari alamat dari suatu variabel?

Kalau yang ingin kalian tunjuk adalah alamat dari variabel tertentu yang sudah ada dalam kode program, maka kalian tidak membutuhkan malloc. Kalian membutuhkan malloc jika pointer akan digunakan untuk menunjuk alamat tertentu yang ada di dalam memori komputer. Dengan malloc, kalian bisa meminta alamat sebagai "titik awal" dari array berukuran tertentu (dalam memori komputer) sesuai keinginan kalian.

Kalau kalian malas mengetik, download source codenya di sini.

Operator apa yang digunakan untuk menentukan alamat suatu variabel?

Seperti yang kita ketahui, variabel pointer berfungsi sebagai penunjuk alamat lokasi variabel lain, dan mengganti nilai variable lyang ditunjuk tersebut Pada operasi pointer, kita menggunakan 2 buah operator dalam bahasa C yaitu “*” dan “&”.

Apa yang dimaksud dengan variabel yang berisi alamat?

Variabel pointer berarti variabel yang berisi alamat memori suatu nilai. Pointer berguna untuk mentransfer data yang mempunyai kapasitas besar,melalui suatu fungsi.

Pointer fungsinya untuk apa?

Pointer adalah jenis variabel. Ini menyimpan alamat objek dalam memori, dan digunakan untuk mengakses objek tersebut.

Bagaimana mengakses alamat data pada pointer?

Latihan: Mengakses data dengan Pointer Saat menggunakan pointer, kita menggunakan tanda * di depan nama pointer untuk mengakses nilai pada alamat memori. Jika tidak menggunakan tanda ini, maka kita akan mendapatkan alamat memori yang di-pointing.