Memahami Array Struct Pointer dalam C++
Dalam C++, struct adalah tipe data terstruktur yang menggabungkan variabel dengan tipe data yang berbeda dalam satu kesatuan. Pointer adalah variabel yang menyimpan alamat memori dari variabel lain. Array adalah kumpulan data dengan tipe data yang sama.
Memahami bagaimana array, struct, dan pointer bekerja bersama dapat meningkatkan fleksibilitas dan efisiensi program C++ Anda. Mari kita jelajahi konsep ini lebih lanjut.
1. Array of Struct
Anda dapat membuat array yang berisi beberapa instance dari struct yang sama. Misalnya, Anda bisa memiliki array yang berisi data siswa:
#include
#include
using namespace std;
struct Mahasiswa {
string nama;
int nim;
float ipk;
};
int main() {
// Membuat array dari 3 struktur Mahasiswa
Mahasiswa mahasiswa[3];
// Mengisi data mahasiswa pertama
mahasiswa[0].nama = "John Doe";
mahasiswa[0].nim = 12345;
mahasiswa[0].ipk = 3.8;
// Mengisi data mahasiswa kedua
mahasiswa[1].nama = "Jane Doe";
mahasiswa[1].nim = 67890;
mahasiswa[1].ipk = 3.5;
// Mengisi data mahasiswa ketiga
mahasiswa[2].nama = "Peter Pan";
mahasiswa[2].nim = 11122;
mahasiswa[2].ipk = 3.2;
// Menampilkan data mahasiswa
for (int i = 0; i < 3; i++) {
cout << "Nama: " << mahasiswa[i].nama << endl;
cout << "NIM: " << mahasiswa[i].nim << endl;
cout << "IPK: " << mahasiswa[i].ipk << endl;
cout << endl;
}
return 0;
}
Dalam kode ini, mahasiswa
adalah array yang berisi tiga struct Mahasiswa
. Anda dapat mengakses setiap anggota struct dalam array dengan menggunakan indeks.
2. Pointer to Struct
Anda juga dapat menggunakan pointer untuk merujuk ke struct. Pointer ke struct menyimpan alamat memori dari struct tersebut.
#include
#include
using namespace std;
struct Mahasiswa {
string nama;
int nim;
float ipk;
};
int main() {
// Membuat struct Mahasiswa
Mahasiswa mhs;
// Membuat pointer ke struct Mahasiswa
Mahasiswa *ptrMhs = &mhs;
// Mengisi data struct menggunakan pointer
ptrMhs->nama = "John Doe";
ptrMhs->nim = 12345;
ptrMhs->ipk = 3.8;
// Menampilkan data struct menggunakan pointer
cout << "Nama: " << ptrMhs->nama << endl;
cout << "NIM: " << ptrMhs->nim << endl;
cout << "IPK: " << ptrMhs->ipk << endl;
return 0;
}
Anda dapat mengakses anggota struct dengan menggunakan operator ->
pada pointer.
3. Array of Pointer to Struct
Anda dapat menggabungkan array dan pointer untuk membuat array yang berisi pointer ke struct. Ini memungkinkan Anda untuk mengelola struktur dinamis.
#include
#include
using namespace std;
struct Mahasiswa {
string nama;
int nim;
float ipk;
};
int main() {
// Membuat array pointer ke struct Mahasiswa
Mahasiswa *mahasiswa[3];
// Alokasi memori untuk masing-masing struct
for (int i = 0; i < 3; i++) {
mahasiswa[i] = new Mahasiswa;
}
// Mengisi data struct menggunakan pointer
mahasiswa[0]->nama = "John Doe";
mahasiswa[0]->nim = 12345;
mahasiswa[0]->ipk = 3.8;
mahasiswa[1]->nama = "Jane Doe";
mahasiswa[1]->nim = 67890;
mahasiswa[1]->ipk = 3.5;
mahasiswa[2]->nama = "Peter Pan";
mahasiswa[2]->nim = 11122;
mahasiswa[2]->ipk = 3.2;
// Menampilkan data struct menggunakan pointer
for (int i = 0; i < 3; i++) {
cout << "Nama: " << mahasiswa[i]->nama << endl;
cout << "NIM: " << mahasiswa[i]->nim << endl;
cout << "IPK: " << mahasiswa[i]->ipk << endl;
cout << endl;
}
// Melepaskan alokasi memori
for (int i = 0; i < 3; i++) {
delete mahasiswa[i];
}
return 0;
}
Dalam contoh ini, mahasiswa
adalah array yang berisi pointer ke struct Mahasiswa
. Anda perlu mengalokasikan memori untuk masing-masing struct dengan menggunakan operator new
dan melepasnya dengan menggunakan delete
setelah selesai.
Keuntungan Menggunakan Array of Pointer to Struct:
- Fleksibel: Anda dapat menambahkan atau menghapus struct secara dinamis.
- Efisiensi: Anda dapat menyimpan struct di lokasi memori yang optimal, menghindari pemborosan ruang.
- Pengelolaan Memori: Anda memiliki kontrol penuh atas alokasi dan dealokasi memori.
Kesimpulan
Memahami hubungan antara array, struct, dan pointer dalam C++ memberikan Anda alat yang ampuh untuk membuat program yang lebih efisien dan fleksibel. Array of pointer to struct memungkinkan Anda untuk bekerja dengan data dinamis dan mengelola memori secara efektif.