Array dan Pointer Bahasa C dan Fungsinya
// Program untuk
// memperlihatkan perbedaan
// antara array dan pointer
#include <iostream>
using namespace std;
int main()
{
int arr[] = {10,20,30,40,50,60};
int* ptr = arr;
// sizof(int) * (jumlah elemen
// arr[]) yang dicetak)
cout << "Sizeof arr[] "
<< sizeof(arr) << "\n";
// sizeof pointer yang dicetak
// sama untuk semua tipe dari
// pointer(char *, void *,
// etc)
cout << "Sizeof ptr "
<< sizeof(ptr);
return 0;
}
Output:Sizeof arr[] 24
Sizeof ptr 8
// Program untuk
// memperlihatkan perbedaan
// antara array dan pointer
#include <stdio.h>
int main()
{
int arr[] = {10,20,30,40,50,60};
int* ptr = arr;
// sizof(int) * (jumlah elemen
// arr[]) yang dicetak
printf("Sizeof arr[] %ld\n", sizeof(arr));
// sizeof pointer yang dicetak
// sama untuk semua tipe dari
// pointer (char *, void *,
// etc)
printf("Sizeof ptr %ld", sizeof(ptr));
return 0;
}
Output:Sizeof arr[] 24
Sizeof ptr 8
Catatan: penetapan alamat apa pun ke variabel array adalah tidak diperbolehkan.
// Program untuk
// memperlihatkan perbedaan
// array dan pointer
#include <iostream>
using namespace std;
int main()
{
int arr[] = {10, 20}, x = 10;
int *ptr = &x;
// Dapat bekerja dengan baik
arr = &x;
// Kompilasi error
return 0;
}
type 'int[2]' from type 'int *'
Contoh: Pada bahasa C
// Program untuk
// memperlihatkan perbedaan
// antara array dan pointer
#include <stdio.h>
int main()
{
int arr[] = {10, 20}, x = 10;
int *ptr = &x;
// Dapat bekerja dengan baik
arr = &x;
// Kompilasi error
return 0;
}
type 'int[2]' from type 'int *'
Meskipun array dan pointer adalah dua hal yang berbeda, namun properti array berikut akan membuat pointer dan array terlihat sama.
satu, Array name dapat memberikan alamat dari elemen pertama pada array. Perhatikan contoh program berikut:
Contoh: Pada C++
// Program untuk
// memperlihatkan perbedaan
// antara array dan pointer
#include <iostream>
using namespace std;
int main()
{
int arr[] = {10,20,30,40,50,60};
// Penentuan alamat dari array
// ke ptr
int* ptr = arr;
cout << "Nilai dari elemen pertama adalah" << *ptr;
return 0;
}
Contoh: Pada bahasa C
#include <stdio.h>
int main()
{
int arr[] = {10,20,30,40,50,60};
// Penentuan alamat dari array
// ke pointer
int* ptr = arr;
printf("Nilai dari elemen"
" pertama adalah %d", *ptr);
return 0;
}
dua, Member array dapat diakses menggunakan aritmatika pointer. Kompilator menggunakan aritmatika pointer untuk mengakses elemen array. Contoh, ekspresi seperti "arr[i]" akan dianggap seperti *(arr+i) oleh kompilator. Inilah alasan kenapa ekspresi seperti *(arr+i) dapat bekerja untuk semua jenis array arr, dan ekspresi seperti ptr[i] juga dapat bekerja pada pointer ptr.
Contoh: Pada C++
#include <iostream>
using namespace std;
int main()
{
int arr[]={10,20,30,40,50,60};
int* ptr = arr;
cout << "arr[2] = "
<< arr[2]
<< "\n";
cout << "*(arr + 2) = "
<< *(arr + 2)
<< "\n";
cout << "ptr[2] = "
<< ptr[2]
<< "\n";
cout << "*(ptr + 2) = "
<< *(ptr + 2)
<< "\n";
return 0;
}
Output:arr[2] = 30
*(arr + 2) = 30
ptr[2] = 30
*(ptr + 2) = 30
Contoh: Pada bahasa C
#include <stdio.h>
int main()
{
int arr[]={10,20,30,40,50,60};
int *ptr = arr;
printf("arr[2] = %d\n"
"", arr[2]);
printf("*(arr + 2) = %d\n"
"", *(arr + 2));
printf("ptr[2] = %d\n"
"", ptr[2]);
printf("*(ptr + 2) = %d\n"
"", *(ptr + 2));
return 0;
}
Output:arr[2] = 30
*(arr + 2) = 30
ptr[2] = 30
*(ptr + 2) = 30
tiga, Parameter array selalu dilewatkan sebagai pointer, meskipun ketika menggunakan square bracket.
Contoh: Pada C++
#include <bits/stdc++.h>
using namespace std;
int fun(int ptr[])
{
int x = 10;
// Sizeof pointer dicetak
cout << "sizeof(ptr) = "
<< (int)sizeof(*ptr)
<< endl;
// Diperbolehkan karena ptr
// adalah pointer, bukan array
ptr = &x;
cout <<"*ptr = " << *ptr;
return 0;
}
// Driver code
int main()
{
int arr[] = { 10, 20, 30, 40, 50, 60 };
// Sizeof array dicetak
cout << "sizeof(arr) = "
<< (int)sizeof(arr)
<< endl;
fun(arr);
return 0;
}
Output:sizeof(arr) = 24
sizeof(ptr) = 4
*ptr = 10
Contoh: Pada bahasa C
#include <stdio.h>
int fun(int ptr[])
{
int x = 10;
// sizeof pointer dicetak
printf("sizeof(ptr) = %d\n", (int)sizeof(*ptr));
// Piperbolehkan karena ptr
// adalah pointer, bukan array
ptr = &x;
printf("*ptr = %d ", *ptr);
return 0;
}
// Driver code
int main()
{
int arr[] = { 10, 20, 30, 40, 50, 60 };
// sizeof array dicetak
printf("sizeof(arr) = %d\n", (int)sizeof(arr));
fun(arr);
return 0;
}
Output:sizeof(arr) = 24
sizeof(ptr) = 4
*ptr = 10
Konsep Dasar Array
Konsep Dasar Pointer
Hubungan Antara Array dan Pointer
Fungsi-Fungsi Array dan Pointer
- Manajemen Data dalam Jumlah Besar: Array dan pointer memungkinkan pengelolaan data dalam jumlah besar secara efisien. Dengan menggunakan array, data yang besar dapat disimpan secara berurutan dalam memori dan diakses dengan mudah melalui indeks. Sementara itu, pointer memungkinkan pengelolaan data tersebut dengan fleksibilitas yang lebih besar, terutama dalam situasi dimana data perlu dipindahkan atau dikelola secara dinamis.
- Efisiensi Akses Memori: Dengan menggunakan pointer, program dapat mengakses memori langsung ke alamat variabel yang dibutuhkan. Ini memungkinkan akses data yang lebih cepat dibandingkan dengan metode lain yang mungkin memerlukan langkah tambahan. Akses langsung ke alamat memori memungkinkan operasi baca dan tulis yang efisien, yang penting dalam aplikasi yang membutuhkan performa tinggi.
- Manipulasi Data Berstruktur: Penggunaan array multidimensi memberikan cara yang efektif untuk mengelola data berstruktur seperti matriks dan tabel. Dengan array dua dimensi, misalnya, pengelolaan data dalam bentuk tabel menjadi lebih mudah dan terstruktur. Di sisi lain, pointer memungkinkan pengembangan struktur data dinamis seperti linked list, dimana elemen data dapat dialokasikan atau dihapus sesuai kebutuhan.
- Fungsi yang Lebih Fleksibel dengan Pointer ke Fungsi: Dalam bahasa C, pointer tidak hanya digunakan untuk menunjuk ke data, tetapi juga dapat menunjuk ke fungsi. Dengan menggunakan pointer ke fungsi, suatu fungsi dapat dipanggil secara dinamis, yang memungkinkan variasi dalam penggunaan fungsi tergantung pada kondisi tertentu. Ini sangat bermanfaat dalam situasi dimana fungsi yang dipanggil harus bergantung pada input pengguna atau kondisi spesifik lainnya.
- Manajemen Memori Dinamis: Dengan adanya fungsi-fungsi alokasi memori seperti `malloc`, `calloc`, dan `free`, pointer memberikan kontrol penuh atas alokasi dan dealokasi memori. Hal ini sangat bermanfaat dalam aplikasi dimana jumlah data yang dikelola tidak bisa diprediksi sebelumnya. Dengan pointer, memori dapat dialokasikan secara dinamis saat dibutuhkan dan dilepaskan ketika sudah tidak lagi diperlukan.
- Passing Parameter secara Efisien dalam Fungsi: Dalam bahasa C, array dan pointer juga digunakan untuk mengirim parameter ke dalam fungsi. Ketika array besar dikirim ke suatu fungsi, passing array melalui pointer lebih efisien karena hanya alamat memori yang dikirim, bukan seluruh isi array. Dengan menggunakan pointer, fungsi dapat memanipulasi data langsung di memori asli tanpa harus membuat salinan data, yang menghemat penggunaan memori dan meningkatkan efisiensi.
Kelebihan dan Kekurangan Penggunaan Array dan Pointer
- Variabel Length Array Bahasa C dan Fungsinya
- Notasi Shorthand Array Bahasa C dan Fungsinya
- Mengakses Array di Luar Batas Bahasa C
- Strcpy Bahasa C dan Fungsinya
- Membandingkan Dua String Menggunakan STRCMP pada Bahasa C
- Menduplikasi Nilai String Menggunakan STRDUP dan STRNDUP pada Bahasa C
- Melewatkan Nilai Array Melalui Value pada Bahasa C
5 komentar untuk "Array dan Pointer Bahasa C dan Fungsinya"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
Apakah pointer masih digunakan pada bahasa OOP?
BalasHapusSudah tidak digunakan lagi, contoh seperti bahasa Java.
HapusApa manfaat pointer pada bahasa C terhadap array?
BalasHapusPointer dapat menunjuk lokasi alamat array pada program, sehingga lebih menghemat alokasi memori dan penamaan variabel.
HapusPointer sangat bermanfaa pada program yang menggunakan alokasi memori dinamis seperti link list.
Hapus