Pointer dalam C:Apa itu Pointer dalam Pemrograman C? Jenis
Apa itu Pointer di C?
Penunjuk di C, adalah variabel yang menyimpan alamat dari variabel lain. Pointer juga dapat digunakan untuk merujuk ke fungsi pointer lain. Pointer dapat ditambah/dikurangi, yaitu untuk menunjuk ke lokasi memori berikutnya/sebelumnya. Tujuan penunjuk 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 nilai, juga memiliki alamatnya (atau, sederhananya, di mana ia berada di memori). Alamat dapat diambil dengan meletakkan ampersand (&) sebelum nama variabel.
Jika Anda mencetak alamat variabel di layar, itu akan terlihat seperti angka yang benar-benar acak (selain itu, bisa berbeda dari run to run).
Mari kita coba ini dalam praktik dengan pointer dalam contoh C
Keluaran dari program ini adalah -480613588.
Sekarang, apa itu pointer? Alih-alih menyimpan nilai, pointer akan y menyimpan alamat variabel.
Variabel Penunjuk
Int *y =&v;
VARIABLEPOINTERA nilai disimpan dalam bernama penyimpanan/alamat memorivariabel yang menunjuk ke alamat penyimpanan/memori lainnya variabel
Mendeklarasikan Pointer
Seperti variabel, pointer dalam pemrograman C harus dideklarasikan sebelum dapat digunakan dalam program Anda. Pointer dapat diberi nama apa pun yang Anda inginkan selama mereka mematuhi aturan penamaan C. Deklarasi pointer memiliki bentuk sebagai berikut.
data_type * pointer_variable_name;
Di sini,
tipe_data adalah tipe dasar pointer dari tipe variabel C dan menunjukkan tipe variabel yang ditunjuk pointer.
Tanda bintang (*:tanda bintang yang sama digunakan untuk perkalian) yang merupakan operator tipuan, menyatakan sebuah pointer.
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 pointer
Setelah mendeklarasikan pointer, kita menginisialisasinya seperti variabel standar dengan alamat variabel. Jika pointer dalam pemrograman C tidak diinisialisasi dan digunakan dalam program, hasilnya tidak dapat diprediksi dan berpotensi menimbulkan bencana.
Untuk mendapatkan alamat suatu variabel, kita menggunakan operator ampersand (&) yang diletakkan 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
OperatorArti * Melayani 2 tujuan
Deklarasi pointer
Mengembalikan nilai variabel yang direferensikan
&Hanya melayani 1 tujuan
Mengembalikan alamat variabel
Jenis Pointer di C
Berikut ini adalah berbagai Jenis Pointer di C :
Penunjuk Null
Kita dapat membuat pointer null dengan menetapkan nilai null selama deklarasi pointer. Metode ini berguna ketika Anda tidak memiliki alamat yang ditetapkan untuk penunjuk. Pointer null 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 Kosong
Dalam pemrograman C, pointer kosong juga disebut sebagai pointer generik. Itu tidak memiliki tipe data standar. Pointer void dibuat dengan menggunakan kata kunci void. Ini dapat digunakan untuk menyimpan alamat variabel apa pun.
Program berikut mengilustrasikan penggunaan pointer kosong:
#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
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 dalam program kami dan dapat menyebabkan crash pada program. Seseorang harus selalu berhati-hati saat bekerja dengan pointer liar.
Program berikut mengilustrasikan penggunaan penunjuk 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 menggantung
Penunjuk kompleks
Penunjuk dekat
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 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