Pada artikel ini, Anda akan mempelajari segala sesuatu tentang petunjuk. Anda akan belajar bagaimana nilai disimpan di komputer dan cara mengaksesnya menggunakan Pointers C++.
Pointer adalah fitur kuat C ++ yang membedakannya dari bahasa pemrograman lain seperti Java dan Python.
Pointers C++ digunakan dalam program C ++ untuk mengakses memori dan memanipulasi alamat.
Address (Alamat) di C ++
Untuk memahami pointer, Anda harus terlebih dahulu tahu bagaimana data disimpan di komputer.
Setiap variabel yang Anda buat dalam program Anda diberikan lokasi dalam memori komputer. Nilai toko variabel sebenarnya disimpan di lokasi yang ditetapkan.
Untuk mengetahui di mana data disimpan, C ++ memiliki & operator. Operator & (referensi) memberi Anda alamat yang ditempati oleh variabel.
Contoh 1: Address in C++
#include <iostream>
using namespace std;
int main()
{
int var1 = 3;
int var2 = 24;
int var3 = 17;
cout << &var1 << endl;
cout << &var2 << endl;
cout << &var3 << endl;
}
Output
0093FCC8
0093FCBC
0093FCB0
Catatan: Anda mungkin tidak mendapatkan hasil yang sama pada sistem Anda.
0x
di awal mewakili alamat dalam bentuk heksadesimal.
Perhatikan bahwa alamat pertama berbeda dari yang kedua dengan 4-byte dan alamat kedua berbeda dari yang ketiga dengan 4-byte.
Ini karena ukuran integer (variabel tipe int
) adalah 4 byte dalam sistem 64-bit
Variabel Pointer
C ++ memberi Anda kekuatan untuk memanipulasi data dalam memori komputer secara langsung. Anda dapat menetapkan dan membatalkan penetapan ruang di memori sesuai keinginan. Ini dilakukan dengan menggunakan variabel Pointer.
Variabel pointer adalah variabel yang menunjuk ke alamat tertentu dalam memori yang ditunjukkan oleh variabel lain.
Bagaimana cara mendeklarasikan pointer?
char* cptr; // pointer to char
int* iptr; // pointer to int
float* fptr; // pointer to float
Distance* distptr; // pointer to user-defined Distance class
Apa tipe data dari variabel pointer? Itu tidak sama dengan variabel yang alamatnya disimpan; pointer ke int
bukan tipe int
. Anda mungkin berpikir tipe data pointer akan disebut sesuatu seperti pointer atau ptr.
Namun, masalahnya sedikit lebih rumit. Selanjutnya Program, PTRVAR, menunjukkan sintaks untuk variabel pointer.
// ptrvar.cpp
// pointers (address variables)
#include <iostream>
using namespace std;
int main()
{
int var1 = 11; //two integer variables
int var2 = 22;
cout << &var1 << endl //print addresses of variables
<< &var2 << endl << endl;
int* ptr; //pointer to integers
ptr = &var1; //pointer points to var1
cout << ptr << endl; //print pointer value
ptr = &var2; //pointer points to var2
cout << ptr << endl; //print pointer value
return 0;
}
Program ini mendefinisikan dua variabel integer, var1 dan var2, dan menginisialisasi mereka ke nilai-nilai 11 dan 22. Ini kemudian mencetak alamat mereka.
Pointer untuk void
Sebelum kita melanjutkan untuk melihat pointer di tempat kerja, kita harus mencatat satu kekhasan tipe data pointer. Biasanya, alamat yang Anda letakkan di pointer harus sama dengan pointer. Kamu tidak bisa tetapkan alamat variabel float
ke pointer ke int
, misalnya:
float flovar = 98.6;
int* ptrint = &flovar; //ERROR: can’t assign float* to int*
Namun, ada pengecualian untuk ini. Ada semacam pointer tujuan umum yang bisa menunjuk untuk semua tipe data. Ini disebut pointer to void
, dan didefinisikan seperti ini:
void* ptr; //ptr can point to any data type
Contoh berikutnya menggunakan pointer ke void
dan juga menunjukkan bahwa, jika Anda tidak menggunakan void
, Anda harus berhati-hatilah untuk memberikan pointer alamat dengan tipe yang sama dengan pointer. Inilah daftar untuk PTRVOID
:
// ptrvoid.cpp
// pointers to type void
#include <iostream>
using namespace std;
int main()
{
int intvar; //integer variable
float flovar; //float variable
int* ptrint; //define pointer to int
float* ptrflo; //define pointer to float
void* ptrvoid; //define pointer to void
ptrint = &intvar; //ok, int* to int*
// ptrint = &flovar; //error, float* to int*
// ptrflo = &intvar; //error, int* to float*
ptrflo = &flovar; //ok, float* to float*
ptrvoid = &intvar; //ok, int* to void*
ptrvoid = &flovar; //ok, float* to void*
return 0;
}
Pointers dan Arrays
Ada hubungan erat antara pointer dan array. Program berikut, ARRNOTE, menyediakan ulasan.
// arrnote.cpp
// array accessed with array notation
#include <iostream>
using namespace std;
int main()
{ //array
int intarray[5] = { 31, 54, 77, 52, 93 };
for (int j = 0; j < 5; j++) //for each element,
cout << intarray[j] << endl; //print value
return 0;
}
Pernyataan tersebut mencetak setiap elemen array secara bergantian. Misalnya, ketika j adalah 3, ekspresi intarray [j] mengambil nilai int
array [3] dan mengakses elemen array keempat, antarmuka int
52. Ini output dari ARRNOTE:
31
54
77
52
93
Ordering dengan Pointer
Program pertama mirip dengan program, “Objek dan Kelas,” kecuali bahwa itu menggunakan pointer bukan referensi. Ini memerintahkan dua nomor yang diteruskan sebagai argumen menukar mereka jika yang kedua lebih kecil dari yang pertama. Inilah daftar untuk PTRORDER:
// ptrorder.cpp
// orders two arguments using pointers
#include <iostream>
using namespace std;
int main()
{
void order(int*, int*); //prototype
int n1 = 99, n2 = 11; //one pair ordered, one not
int n3 = 22, n4 = 88;
order(&n1, &n2); //order each pair of numbers
order(&n3, &n4);
cout << "n1=" << n1 << endl; //print out all numbers
cout << "n2=" << n2 << endl;
cout << "n3=" << n3 << endl;
cout << "n4=" << n4 << endl;
return 0;
}
//--------------------------------------------------------------
void order(int* numb1, int* numb2) //orders two numbers
{
if (*numb1 > * numb2) //if 1st larger than 2nd,
{
int temp = *numb1; //swap them
*numb1 = *numb2;
*numb2 = temp;
}
}
Urutan fungsi order( )
berfungsi sama seperti di REFORDER, kecuali bahwa ia dilewatkan alamat nomor yang akan dipesan, dan mengakses nomor menggunakan pointer. Itu adalah, numb1
mengakses nomor di main ()
yang dilewatkan sebagai argumen pertama, dan * numb2
mengakses kedua.
Output :
n1=11 n2=99 n3=22 n4=88
Kami akan menggunakan fungsi order () dari PTRORDER dalam program contoh kami berikutnya, PTRSORT, yang mengurutkan array bilangan bulat.
// ptrsort.cpp
// mengurutkan array menggunakan pointer
#include <iostream>
using namespace std;
int main()
{
void bsort(int*, int); //prototype
const int N = 10; //array size
//test array
int arr[N] = { 37, 84, 62, 91, 11, 65, 57, 28, 19, 49 };
bsort(arr, N); //sort the array
for (int j = 0; j < N; j++) //print out sorted array
cout << arr[j] << " ";
cout << endl;
return 0;
}
//--------------------------------------------------------------
void bsort(int* ptr, int n)
{
void order(int*, int*); //prototype
int j, k; //indexes to array
for (j = 0; j < n - 1; j++) //outer loop
for (k = j + 1; k < n; k++) //inner loop starts at outer
order(ptr + j, ptr + k); //order the pointer contents
}
//--------------------------------------------------------------
void order(int* numb1, int* numb2) //orders two numbers
{
if (*numb1 > * numb2) //if 1st larger than 2nd,
{
int temp = *numb1; //swap them
*numb1 = *numb2;
*numb2 = temp;
}
}
Array integer array di main ()
diinisialisasi ke nilai yang tidak disortir. Alamat array, dan jumlah elemen, diteruskan ke fungsi bsort ()
. Ini mengurutkan array, dan nilai yang diurutkan kemudian dicetak. Inilah output dari PTRSORT:
11 19 28 37 49 57 62 65 84 91
Sekian dari penjelasan mengenai pointers C++ pada artikel kali ini, jika ada salah kata atau kesalahan lainnya mohon dimaafkan, terimakasih