Aritmatika Penunjuk C++

Aritmatika Penunjuk C



Artikel ini membahas tentang aritmatika pointer di C++. Pointer adalah variabel yang menyimpan alamat memori data. Aritmatika penunjuk adalah ciri kuat dalam dunia bahasa pemrograman C++ yang memungkinkan kita menangani berbagai operasi aritmatika di mana penjumlahan, perkalian, pembagian, kenaikan, pengurangan, dan pengurangan melibatkan penunjuk untuk mengembangkan alamat memori baru di buffer memori kita. . Aritmatika penunjuk dengan mudah menciptakan alokasi memori dinamis. Dalam artikel C++ ini, kita akan mempelajari cara memanipulasi alamat memori dengan cara yang berbeda dengan bantuan pointer dan memberikan panduan serta contoh yang tepat.

Skenario 1: Pointer Melakukan Operasi Kenaikan dan Penurunan

Di sini kita akan belajar tentang manipulasi pointer untuk menghasilkan alamat memori berbeda yang memiliki tujuan berbeda. Pointer yang menambah dan mengurangi juga merupakan aritmatika leverage pointer yang menambah atau mengurangi alamat dengan faktor satu dikalikan dengan ukuran tipe data yang ditunjuknya. Cuplikan kode yang terkait dengan skenario ini terlampir sebagai berikut:







#termasuk
menggunakan namespace std;
konstan ke dalam Arr_Max = 5 ;
ke utama ( ) {
ke mana [ Arr_Max ] = { dua puluh , 150 , 270 } ;
ke dalam * ptr; // menyatakan penunjuk
ptr = var;
untuk ( ke dalam saya = 0 ; Saya < Arr_Max; saya++ ) {
std::cout << 'Alamat memori elemen adalah: [' << Saya << '] = ' ;
std::cout << ptr << akhir;
cout << 'Nilai terhadap alamat adalah [' << Saya << '] = ' ;
cout << * ptr << akhir;
std::cout << 'pointer berhasil bertambah' << akhir;
ptr++;
}
std::cout << 'Alamat penunjuk sebelum pengurangan' << ptr << akhir;
ptr--;
std::cout << 'Alamat penunjuk setelah pengurangan' << ptr << akhir;
kembali 0 ;
}


Di sini, kami mendefinisikan perpustakaan yang diperlukan dalam kode di awal: “ ”. Kami mendefinisikan alokasi memori untuk mencadangkan ruang di memori yaitu “Arr_Max=5”. Dalam fungsi utama, kita menginisialisasi array dan meneruskan ukuran memori ke array tersebut. Selanjutnya, deklarasi pointer “ptr” juga diperlukan untuk menunjukkan alamat memori di memori.



Kami meneruskan array ke pointer untuk mengakses alamat. Seperti yang kita ketahui bersama, array selalu berisi banyak item di lokasi berbeda. Jadi, kami memerlukan loop dengan penunjuk “bantuan” untuk mengakses setiap elemen array. Setiap kali loop dijalankan, kita mendapatkan alamat memori dan nilai terhadap alamat ini dengan bantuan operator kenaikan aritmatika penunjuk “ptr++” yang menggeser alamat memori ke alamat memori berikutnya. Siklus eksekusi loop bergantung pada ukuran array. Di luar perulangan, kita ingin mengembalikan penunjuk ke alamat memori sebelumnya hanya dengan menggunakan penunjuk penurunan “ptr- -”.



Jalankan kode ini dengan mengklik opsi Execute>Compile & Run dan Anda akan mendapatkan output berikut:






Semoga keluaran ini mudah dipahami. Alamat dan nilai memori diubah. Menggeser penunjuk dari satu lokasi hanya dapat dilakukan dari aritmatika penunjuk pertambahan di C++.

Skenario 2:  Mengurangi Dua Pointer di C++

Dalam skenario ini, kita akan mempelajari cara mengurangi dua atau lebih pointer di C++. Semua operasi aritmatika yang melakukan pengurangan adalah proses penting karena kita hanya dapat mengurangi dua penunjuk secara bersamaan jika dan hanya jika keduanya memiliki tipe data yang sama.



Operasi lain seperti penjumlahan, perkalian, dan pembagian tidak mungkin dilakukan di pointer karena tidak masuk akal dalam pengalamatan memori. Cuplikan kode terlampir di bawah ini:

#termasuk
ke utama ( ) {
Dia memberi isyarat [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
ke dalam * ptrr1 = & Untuk itu [ 3 ] ; // Penunjuk ke elemen ketiga ( 42 )
ke dalam * ptrr2 = & Untuk itu [ 6 ] ; // Penunjuk ke elemen keenam ( 89 )
ptrdiff_t pengurangan ptr = ptrr2 - ptrr1;

std::cout << 'Perbedaan antara alamat-alamat ini adalah:' << pengurangan ptr << ' elemen' << std::endl;
kembali 0 ;
}


Operasi pengurangan adalah mencari selisih alamat memori di C++. Dalam fungsi utama, kita mengambil array yang berisi nilai berbeda pada indeks berbeda. Dalam sebuah array, setiap indeks memiliki lokasi memori yang berbeda. Kita hanya dapat menemukan perbedaan antara dua pointer dengan bantuan aritmatika pointer. Di sini, kami menggunakan tipe pointer khusus “ptrdiff_t” yang harus digunakan untuk menemukan perbedaan antara dua atau lebih pointer di C++.

Output dari kode ini terlampir sebagai berikut:


Perbedaan antara alamat-alamat ini adalah berdasarkan elemen vise yaitu 3.

Skenario 3: Bandingkan Dua atau Lebih Pointer di C++

Dalam skenario ini, kita akan belajar bagaimana membandingkan pointer yang berbeda di C++ menggunakan operator relasional yang berbeda seperti “==”, “<=”, “>=”, “<”, ”>”. Kita hanya dapat membandingkan pointer jika pointer tersebut menunjuk ke alamat elemen array yang sama. Ingatlah bahwa membandingkan dua pointer dengan tipe berbeda dapat menyebabkan perilaku tidak terdefinisi. Cuplikan kode yang terkait dengan perbandingan pointer disebutkan sebagai berikut:

#termasuk
menggunakan namespace std;
ke utama ( )
{
ke dalam arr1 [ 10 ] = { 4 , 7 , 9 , sebelas , 14 , 16 , 18 , dua puluh , 22 , 25 } ;
ke dalam * ptr1 = & arr1 [ 3 ] ;
ke dalam * ptr2 = & arr1 [ 6 ] ;
ke dalam * ptr3 = & arr1 [ 8 ] ;
ke dalam * ptr4 = & arr1 [ 9 ] ;
jika ( ptr1 ==ptr2 )
{
std::cout << 'pointernya sama' << akhir;
}
kalau tidak jika ( ptr3 < =ptr4 )
{
std::cout << 'ptr3 lebih kecil atau sama dengan ptr4' << akhir ;;
}
kalau tidak
{
std::cout << 'petunjuk tidak dibandingkan pada tahap mana pun' << akhir;
}
kembali 0 ;
}


Di sini, kita mengambil array dengan 10 elemen. Kami mendeklarasikan empat pointer yang menunjuk ke indeks array yang berbeda. Setelah itu, kami membandingkan keempat pointer ini pada kondisi berbeda seperti yang terlihat pada kode yang diberikan. Pada kondisi “if”, periksa apakah penunjuk “ptr1” sama dengan penunjuk “ptr2”, lalu cetak “penunjuk sama”. Ketika kita memiliki beberapa kondisi di mana kita menggunakan kondisi “else if” untuk memeriksa apakah penunjuk “ptr3” kurang dari sama dengan penunjuk “ptr4”. Setelah semua itu, klik Jalankan> Kompilasi & Jalankan pilihan.

Output dari kode ini terlampir sebagai berikut:


Ini menampilkan kondisi yang valid di layar konsol dan keluar dari kompilasi. Pointer “ptr3” berisi nilai yang kurang dari atau sama dengan nilai penunjuk pointer “ptr4”.

Skenario 4: Menampilkan angka Ganjil dengan Aritmatika Pointer

Di sini, kita akan melihat bagaimana kita dapat mengalokasikan memori secara dinamis untuk array bilangan bulat. Cuplikan kode yang terkait dengan kasus ini diberikan sebagai berikut:

#termasuk
ke utama ( ) {
ke dalam angka [ ] = { 1 , 12 , 33 , 24 , limabelas , 776 , 71 , 18 , 29 , lima puluh } ;
ke dalam * ptrr = angka;
std::cout << 'Angka ganjil dalam array:' ;
untuk ( ke dalam saya = 0 ; Saya < 10 ; ++saya ) {
jika ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << ' ' ;
}
ptrr++;
}
std::cout << std::endl;
kembali 0 ;
}


Dalam fungsi utama, kita mengambil array yang berisi 10 elemen. Kita memerlukan pointer yang menunjukkan semua elemen dalam array untuk memeriksa bilangan ganjil dalam array. Dalam perulangan “for”, periksa bilangan ganjil dengan membagi elemen array saat ini. Penghitung penunjuk bertambah setelah memeriksa satu elemen array.

Setelah mengeksekusi kode, output ditampilkan pada layar konsol seperti berikut:


Dengan cara ini, kita dapat menampilkan angka ganjil menggunakan aritmatika penunjuk di layar konsol.

Kesimpulan

Kami menyimpulkan di sini bahwa aritmatika penunjuk adalah alat paling efektif yang melakukan berbagai operasi di C++. Pastikan penunjuk menambah atau mengurangi nilai array yang memiliki tipe data yang sama. Kita dapat membandingkan nilai suatu array berdasarkan alamat memorinya dengan bantuan aritmatika pointer dalam bahasa pemrograman C++. Kita dapat melintasi array dan mengelola memori dengan mudah dengan bantuan aritmatika pointer.