Pointer di C: Apa itu Pointer di Pemrograman C? Jenis
Apa itu Pointer di C?
The Petunjuk di C, adalah variabel yang menyimpan alamat variabel lain. Sebuah pointer juga dapat digunakan untuk merujuk ke fungsi pointer lainnya. Sebuah pointer dapat ditambah/dikurangi, yaitu menunjuk ke lokasi memori berikutnya/sebelumnya. Tujuan dari pointer adalah untuk menghemat ruang memori dan mencapai waktu eksekusi yang lebih cepat.
Cara Menggunakan Pointer di C
Jika kita mendeklarasikan variabel v bertipe int, v sebenarnya akan menyimpan sebuah nilai.
v sama dengan nol sekarang.
Namun, setiap variabel, selain nilainya, juga memiliki alamatnya (atau, sederhananya, lokasinya di memori). Alamat dapat diambil dengan memberi tanda ampersand (&) sebelum nama variabel.
Jika Anda mencetak alamat suatu variabel di layar, itu akan terlihat seperti angka yang benar-benar acak (selain itu, dapat berbeda dari satu proses ke proses lainnya).
Mari kita coba praktik ini dengan pointer di contoh C
Output dari program ini adalah -480613588.
Sekarang, apa itu penunjuk? Daripada menyimpan suatu nilai, sebuah pointer akan menyimpan alamat suatu variabel.
Variabel Penunjuk
Ke dalam *y = &v;
| VARIABEL | PENUNJUK |
|---|---|
| A nilai disimpan di a bernama alamat penyimpanan/memori | A variabel bahwa menunjuk ke alamat penyimpanan/memori lain variabel |
Mendeklarasikan Pointer
Seperti variabel, pointer masuk pemrograman C harus dideklarasikan sebelum dapat digunakan dalam program Anda. Pointer dapat diberi nama apa pun yang Anda inginkan selama mematuhi aturan penamaan C. Deklarasi pointer memiliki bentuk berikut.
data_type * pointer_variable_name;
Di sini,
- tipe data adalah tipe dasar penunjuk dari tipe variabel C dan menunjukkan tipe variabel yang ditunjuk oleh penunjuk.
- Tanda bintang (*: tanda bintang yang sama digunakan untuk perkalian) yang merupakan operator tidak langsung, mendeklarasikan sebuah penunjuk.
Mari kita lihat beberapa deklarasi pointer yang valid dalam tutorial pointer C ini:
int *ptr_thing; /* pointer to an integer */ int *ptr1,thing;/* ptr1 is a pointer to type integer and thing is an integer variable */ double *ptr2; /* pointer to a double */ float *ptr3; /* pointer to a float */ char *ch1 ; /* pointer to a character */ float *ptr, variable;/*ptr is a pointer to type float and variable is an ordinary float variable */
Inisialisasi penunjuk
Setelah mendeklarasikan pointer, kita menginisialisasinya seperti variabel standar dengan alamat variabel. Jika pointer dalam pemrograman C tidak diinisialisasi dan digunakan dalam suatu program, hasilnya bisa tidak terduga dan berpotensi membawa bencana.
Untuk mendapatkan alamat suatu variabel, kita menggunakan operator ampersand (&), yang ditempatkan sebelum nama variabel yang alamatnya kita perlukan. Inisialisasi pointer dilakukan dengan sintaks berikut.
Sintaks Penunjuk
pointer = &variable;
Sebuah program sederhana untuk ilustrasi pointer diberikan di bawah ini:
#include <stdio.h>
int main()
{
int a=10; //variable declaration
int *p; //pointer variable declaration
p=&a; //store address of variable a in pointer p
printf("Address stored in a variable p is:%x\n",p); //accessing the address
printf("Value stored in a variable p is:%d\n",*p); //accessing the value
return 0;
}
Keluaran:
Address stored in a variable p is:60ff08 Value stored in a variable p is:10
| Operator | Arti |
|---|---|
| * | Melayani 2 tujuan
|
| & | Hanya melayani 1 tujuan
|
Jenis Pointer di C
Berikut ini adalah perbedaannya Jenis Pointer di C:
Pointer Null
Kita dapat membuat pointer null dengan memberikan nilai null selama deklarasi pointer. Metode ini berguna bila Anda tidak memiliki alamat apa pun yang ditetapkan ke penunjuk. Pointer nol selalu berisi nilai 0.
Program berikut mengilustrasikan penggunaan pointer null:
#include <stdio.h>
int main()
{
int *p = NULL; //null pointer
printf(“The value inside variable p is:\n%x”,p);
return 0;
}
Keluaran:
The value inside variable p is: 0
Penunjuk Batal
In pemrograman C, penunjuk kosong juga disebut sebagai penunjuk umum. Itu tidak memiliki tipe data standar apa pun. Pointer void dibuat dengan menggunakan kata kunci void. Ini dapat digunakan untuk menyimpan alamat variabel apa pun.
Program berikut mengilustrasikan penggunaan pointer void:
#include <stdio.h>
int main()
{
void *p = NULL; //void pointer
printf("The size of pointer is:%d\n",sizeof(p));
return 0;
}
Keluaran:
The size of pointer is:4
Penunjuk liar
Sebuah pointer dikatakan sebagai pointer liar jika tidak diinisialisasi ke apa pun. Jenis pointer C ini tidak efisien karena mungkin menunjuk ke beberapa lokasi memori yang tidak diketahui yang dapat menyebabkan masalah pada program kita dan dapat menyebabkan program mogok. Seseorang harus selalu berhati-hati saat bekerja dengan petunjuk liar.
Program berikut mengilustrasikan penggunaan pointer liar:
#include <stdio.h>
int main()
{
int *p; //wild pointer
printf("\n%d",*p);
return 0;
}
Keluaran:
timeout: the monitored command dumped core sh: line 1: 95298 Segmentation fault timeout 10s main
Jenis pointer lain di 'c' adalah sebagai berikut:
- Penunjuk yang menggantung
- Penunjuk kompleks
- Dekat penunjuk
- Penunjuk jauh
- Penunjuk besar
Penunjuk Akses Langsung dan Tidak Langsung
Di C, ada dua cara yang setara untuk mengakses dan memanipulasi konten variabel
- Akses langsung: kami menggunakan nama variabel secara langsung
- Akses tidak langsung: kita menggunakan pointer ke variabel
Mari kita pahami ini dengan bantuan program di bawah ini
#include <stdio.h>
/* Declare and initialize an int variable */
int var = 1;
/* Declare a pointer to int */
int *ptr;
int main( void )
{
/* Initialize ptr to point to var */
ptr = &var;
/* Access var directly and indirectly */
printf("\nDirect access, var = %d", var);
printf("\nIndirect access, var = %d", *ptr);
/* Display the address of var two ways */
printf("\n\nThe address of var = %d", &var);
printf("\nThe address of var = %d\n", ptr);
/*change the content of var through the pointer*/
*ptr=48;
printf("\nIndirect access, var = %d", *ptr);
return 0;}
Setelah program dikompilasi tanpa ada kesalahan, hasilnya adalah:
Direct access, var = 1 Indirect access, var = 1 The address of var = 4202496 The address of var = 4202496 Indirect access, var = 48
Pointer Aritmatika di C
Operasi pointer dirangkum dalam gambar berikut

Operasi prioritas (presedensi)
Saat bekerja dengan pointer C, kita harus memperhatikan aturan prioritas berikut:
- Operator * dan & memiliki prioritas yang sama dengan operator unary (negasi!, inkrementasi++, decrement–).
- Dalam ekspresi yang sama, operator unary *, &,!, ++, – dievaluasi dari kanan ke kiri.
Jika penunjuk P menunjuk ke variabel X, maka *P dapat digunakan dimanapun X dapat ditulis.
Ekspresi berikut ini ekuivalen:
int X =10 int *P = &Y; For the above code, below expressions are true
| Ekspresi | Ekspresi Setara |
|---|---|
| Y=*P+1
*P=*P+10 *P+=2 ++*Hal (*P)++ |
Y=X+1
X=X+10 X+=2 ++X X++ |
Dalam kasus terakhir, tanda kurung diperlukan: karena operator unary * dan ++ dievaluasi dari kanan ke kiri, tanpa tanda kurung, penunjuk P akan bertambah, bukan objek yang ditunjuk P.
Tabel di bawah ini menunjukkan operasi aritmatika dan dasar yang dapat digunakan saat menangani pointer C
| Operaproduksi | Penjelasan |
|---|---|
| Penugasan | ke dalam *P1,*P2 P1=P2; P1 dan P2 menunjuk ke variabel integer yang sama |
| Kenaikan dan penurunan | Ke dalam *P1; P1++;P1– ; |
| Menambahkan offset (Konstan) | Hal ini memungkinkan pointer untuk memindahkan N elemen dalam sebuah tabel. Pointer akan bertambah atau berkurang sebesar N kali jumlah byte dari jenis variabel. P1+5; |
C Pointer & Array dengan Contoh
Secara tradisional, kita mengakses elemen array menggunakan indeksnya, namun metode ini dapat dihilangkan dengan menggunakan pointer. Pointer memudahkan untuk mengakses setiap elemen array.
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5}; //array initialization
int *p; //pointer declaration
/*the ptr points to the first element of the array*/
p=a; /*We can also type simply ptr==&a[0] */
printf("Printing the array elements using pointer\n");
for(int i=0;i<5;i++) //loop for traversing array elements
{
printf("\n%x",*p); //printing array elements
p++; //incrementing to the next element, you can also write p=p+1
}
return 0;
}
Keluaran:
1 2 3 4 5
Menambahkan angka tertentu ke pointer akan memindahkan lokasi pointer ke nilai yang diperoleh dari operasi penjumlahan. Misalkan p adalah pointer yang saat ini menunjuk ke lokasi memori 0 jika kita melakukan operasi penjumlahan berikut, p+1 maka operasi tersebut akan dijalankan dengan cara ini:
Karena p saat ini menunjuk ke lokasi 0 setelah menambahkan 1, nilainya akan menjadi 1, dan karenanya penunjuk akan menunjuk ke lokasi memori 1.
C Pointer dan String dengan Contoh
String adalah array objek char, diakhiri dengan karakter null '\ 0'. Kita dapat memanipulasi string menggunakan pointer. Penunjuk dalam contoh C ini menjelaskan bagian ini
#include <stdio.h>
#include <string.h>
int main()
{
char str[]="Hello Guru99!";
char *p;
p=str;
printf("First character is:%c\n",*p);
p =p+1;
printf("Next character is:%c\n",*p);
printf("Printing all the characters in a string\n");
p=str; //reset the pointer
for(int i=0;i<strlen(str);i++)
{
printf("%c\n",*p);
p++;
}
return 0;
}
Keluaran:
First character is:H Next character is:e Printing all the characters in a string H e l l o G u r u 9 9 !
Cara lain untuk menangani string adalah dengan array pointer seperti dalam program berikut:
#include <stdio.h>
int main(){
char *materials[ ] = { "iron", "copper", "gold"};
printf("Please remember these materials :\n");
int i ;
for (i = 0; i < 3; i++) {
printf("%s\n", materials[ i ]);}
return 0;}
Keluaran:
Please remember these materials: iron copper gold
Keuntungan Pointer di C
- Pointer berguna untuk mengakses lokasi memori.
- Pointer menyediakan cara yang efisien untuk mengakses elemen struktur array.
- Pointer digunakan untuk alokasi memori dinamis serta deallokasi.
- Pointer digunakan untuk membentuk struktur data yang kompleks seperti daftar tertaut, grafik, pohon, dan lain-lain.
Kekurangan Pointer di C
- Petunjuk agak rumit untuk dipahami.
- Pointer dapat menyebabkan berbagai kesalahan seperti kesalahan segmentasi atau dapat mengakses lokasi memori yang tidak diperlukan sama sekali.
- Jika nilai yang salah diberikan ke pointer, hal ini dapat menyebabkan kerusakan memori.
- Pointer juga bertanggung jawab atas kebocoran memori.
- Pointer relatif lebih lambat dibandingkan variabel.
- Pemrogram merasa sangat sulit bekerja dengan pointer; oleh karena itu merupakan tanggung jawab programmer untuk memanipulasi pointer dengan hati-hati.
Ringkasan
- Pointer tidak lain hanyalah lokasi memori tempat data disimpan.
- Pointer digunakan untuk mengakses lokasi memori.
- Ada berbagai jenis pointer seperti null pointer, wild pointer, void pointer dan jenis pointer lainnya.
- Pointer dapat digunakan dengan array dan string untuk mengakses elemen dengan lebih efisien.
- Kita dapat membuat pointer fungsi untuk memanggil suatu fungsi secara dinamis.
- Operasi aritmatika dapat dilakukan pada suatu penunjuk yang disebut dengan aritmatika penunjuk.
- Pointer juga dapat menunjuk ke fungsi yang memudahkan pemanggilan fungsi yang berbeda jika mendefinisikan array pointer.
- Saat Anda ingin menangani tipe data variabel yang berbeda, Anda dapat menggunakan pointer void typecast.


