Lompat ke konten Lompat ke sidebar Lompat ke footer

Array dan Pointer Bahasa C dan Fungsinya

Pointer digunakan untuk menyimpan alamat dari alokasi array dinamis, juga untuk melewatkan array itu sendiri sebagai argumen dari fungsi. Dalam konteks lain, array dan pointer merupakan dua hal yang berbeda satu sama lain. Perhatikan program berikut untuk memahami perbedaan antara pointer dan array dalam bahasa C.


Sebelum memahami lebih dalam materi tentang Array dan Pointer Bahasa C dan Fungsinya, terlebih dahulu pelajari materi tentang: Program Penyimpanan String Bahasa C, Program Menukar String Bahasa C, dan GETS Bahasa C dan Fungsinya.

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};

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

Contoh: Pada Bahasa C

// 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.

Contoh: Pada C++

// 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;

}

Output:
Kompilator Error: incompatible types when assigning to
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;

}

Output:
Kompilator Error: incompatible types when assigning to
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 arrayPerhatikan 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;

}

Output:
Nilai dari elemen pertama adalah 10

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;

}

Output:
Nilai dari elemen pertama adalah 10

dua, Member array dapat diakses menggunakan aritmatika pointerKompilator 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


Baca Juga:

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


Dalam pemrograman bahasa C, pemahaman tentang array dan pointer sangatlah penting karena keduanya berperan fundamental dalam manajemen data dan memori. Array dan pointer merupakan dua konsep berbeda, namun saling terkait, yang memungkinkan pengelolaan data secara efisien. Mengetahui bagaimana array dan pointer bekerja memberikan fleksibilitas dalam mengakses, memanipulasi, serta menyimpan data, terutama ketika bekerja dengan data yang besar atau dalam aplikasi yang menuntut efisiensi memori.

Konsep Dasar Array

Array adalah struktur data yang berfungsi menyimpan sejumlah elemen dengan tipe data yang sama dalam satu kesatuan. Sebuah array memungkinkan penyimpanan data dalam blok memori yang berurutan, sehingga akses terhadap elemen-elemen di dalamnya menjadi lebih cepat. Setiap elemen dalam array dapat diakses dengan indeks yang menunjukkan posisi elemen tersebut dalam susunan memori. Pada umumnya, indeks dalam array dimulai dari 0, sehingga elemen pertama berada di posisi indeks 0, elemen kedua di posisi indeks 1, dan seterusnya.

Penggunaan array sangatlah berguna dalam situasi dimana data yang harus disimpan memiliki tipe yang sama dan perlu diakses secara acak. Contohnya dalam kasus data numerik seperti deret angka, data karakter, atau data yang bersifat berurutan. Array memungkinkan data tersebut diakses dengan mudah, dan manipulasi terhadap data di dalam array dapat dilakukan secara efisien. Karena setiap elemen memiliki posisi memori tetap, operasi seperti pembacaan dan penulisan nilai dapat dilakukan dengan cepat. 

Dalam situasi dimana data yang disimpan relatif sedikit, penggunaan array mungkin tidak terlalu penting. Namun, ketika data yang dikelola berjumlah besar, array menjadi pilihan yang sangat ideal karena organisasi datanya yang terstruktur. Dengan array, data yang disimpan dapat disusun dalam berbagai dimensi, seperti array satu dimensi, dua dimensi, atau bahkan lebih. Penggunaan array multidimensi biasa ditemukan dalam pengolahan data kompleks, misalnya dalam representasi matriks atau tabel, dimana data terorganisir dalam baris dan kolom.

Konsep Dasar Pointer

Pointer adalah variabel khusus yang berisi alamat memori dari variabel lain. Dalam bahasa C, pointer memainkan peran penting dalam manajemen memori, karena memungkinkan akses langsung ke alamat memori variabel yang ingin diakses atau dimanipulasi. Dengan menggunakan pointer, nilai dari suatu variabel dapat diubah tanpa harus memanipulasi variabel itu sendiri, cukup dengan memanipulasi alamat memori yang ditunjuk oleh pointer.

Selain itu, pointer memberikan fleksibilitas yang luar biasa dalam pengembangan aplikasi yang menuntut efisiensi memori. Pointer memungkinkan pengembang untuk melakukan operasi yang lebih dinamis, seperti alokasi memori secara manual, manajemen data besar, serta pengembangan struktur data yang kompleks seperti linked list, tree, dan graph. 

Salah satu keuntungan utama penggunaan pointer adalah efisiensi akses memori. Dalam operasi yang melibatkan data dalam jumlah besar, pointer meminimalkan overhead dalam penggunaan memori karena memungkinkan pengelolaan data secara langsung melalui alamat memori. Penggunaan pointer menjadi sangat penting dalam pemrograman tingkat rendah dan dalam aplikasi yang berinteraksi dengan perangkat keras, dimana kontrol penuh atas alokasi memori sangat dibutuhkan.

Hubungan Antara Array dan Pointer

Array dan pointer memiliki hubungan erat dalam bahasa C. Dalam konteks teknis, nama array sebenarnya adalah pointer tetap yang menunjuk ke alamat memori dari elemen pertama dalam array tersebut. Ini berarti bahwa array dan pointer memiliki kesamaan dalam hal akses memori, terutama ketika menangani elemen-elemen dalam susunan yang berurutan.

Array dapat dianggap sebagai sekumpulan alamat memori yang berurutan. Setiap elemen dalam array memiliki alamat memori yang berurutan, sehingga penunjukan ke elemen-elemen tersebut dapat dilakukan dengan operasi pointer. Ketika pointer menunjuk ke elemen pertama suatu array, dengan menggeser alamat pointer tersebut, elemen-elemen berikutnya dalam array dapat diakses. Hal ini menciptakan ilusi seolah-olah elemen-elemen dalam array dapat diakses seperti halnya akses pointer. 

Kekuatan pointer dalam konteks array terletak pada kemampuan untuk mengakses elemen-elemen dalam array secara langsung tanpa memerlukan operasi tambahan. Ini sangat membantu dalam situasi dimana manipulasi data secara berulang-ulang dibutuhkan. Dalam kasus array multidimensi, pointer memberikan akses yang lebih fleksibel karena memungkinkan pergerakan bebas di dalam susunan memori.

Namun, meskipun array dan pointer memiliki banyak kesamaan, ada perbedaan mendasar di antara keduanya. Sebuah array memiliki panjang yang tetap, sedangkan pointer lebih fleksibel dalam hal ukuran data yang ditunjuknya. Selain itu, array tidak dapat dipindahkan ke alamat memori lain, sementara pointer bisa diubah untuk menunjuk ke alamat memori yang berbeda. Dengan kata lain, meskipun array adalah pointer tetap, pointer dapat diubah untuk menunjuk ke alamat memori lainnya.

Fungsi-Fungsi Array dan Pointer

Array dan pointer memberikan fleksibilitas yang sangat dibutuhkan dalam pemrograman bahasa C. Beberapa fungsi utama yang dapat dilakukan dengan array dan pointer antara lain adalah:
  • 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

Penggunaan array dan pointer dalam bahasa C memiliki kelebihan dan kekurangan. Kelebihan utama dari array adalah kemampuannya menyimpan data secara berurutan dan terstruktur, yang memudahkan pengelolaan data besar. Namun, kekurangan array adalah panjangnya yang tetap sehingga tidak fleksibel dalam hal perubahan ukuran.

Pointer, di sisi lain, memiliki kelebihan dalam hal fleksibilitas dan efisiensi memori. Penggunaan pointer memungkinkan manipulasi data dan alokasi memori secara dinamis. Namun, pointer juga memiliki kekurangan, terutama dalam hal kompleksitas penggunaan dan risiko kesalahan memori. Kesalahan dalam penggunaan pointer dapat mengakibatkan berbagai masalah, seperti memory leak atau dereferensi pointer null, yang berpotensi mengakibatkan crash program.

Dalam praktiknya, array dan pointer sering digunakan bersama untuk mencapai efisiensi dan fleksibilitas dalam pengelolaan data. Array memberikan struktur yang jelas dan terorganisir untuk data, sedangkan pointer memberikan kemampuan manipulasi memori yang lebih mendalam. Pemahaman mendalam tentang kedua konsep ini memberikan dasar yang kuat bagi pengembang dalam membangun aplikasi yang efisien dan efektif dalam bahasa C.

Artikel ini didedikasikan kepada: Yustian Dewi Krismarani, Abdullah Safi'I Khusnul Huda, Adil Muhammad Firdaus Hermansur, Adila Salma Khatwang, dan Ahmad Rozali.

5 komentar untuk "Array dan Pointer Bahasa C dan Fungsinya"

  1. Apakah pointer masih digunakan pada bahasa OOP?

    BalasHapus
    Balasan
    1. Sudah tidak digunakan lagi, contoh seperti bahasa Java.

      Hapus
  2. Apa manfaat pointer pada bahasa C terhadap array?

    BalasHapus
    Balasan
    1. Pointer dapat menunjuk lokasi alamat array pada program, sehingga lebih menghemat alokasi memori dan penamaan variabel.

      Hapus
    2. Pointer sangat bermanfaa pada program yang menggunakan alokasi memori dinamis seperti link list.

      Hapus

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 -