DAFTAR LABEL POPULER PENELITIAN.ID
DAFTAR LABEL POPULER PENELITIAN.ID
Tampilkan selengkapnya
Tampilkan lebih sedikit
PENELITIAN.ID
DAFTAR ARSIP POSTING PENELITIAN.ID
DAFTAR ARSIP POSTING PENELITIAN.ID
Pointer Ke Array Bahasa C dan Penjelasannya
- Dapatkan link
- Aplikasi Lainnya
Dipublikasikan Oleh
elfanmauludi
Pada artikel ini akan dijelaskan tentang pointer to array pada bahasa C, beserta penggunaannya dalam dunia pemrograman.
Contoh:
Sintak:
data_type (*var_name)[size_of_array];
Contoh Penulisan Pointer Ke Array:
int (*ptr)[10];
Pada contoh tersebut terdapat sebuah pointer dengan nama ptr yang mengarah ke array dari sepuluh nilai integer. Karena subscript memiliki nilai precedensi yang lebih besar dari nilai indireksi, maka sangat penting untuk dilakukan enclose operator indireksi dan nama pointer yang terdapat di dalam tanda kurung. Berikut adalah tipe dari pointer untuk jenis 'pointer ke array dari sepuluh integer'.
Ketika dilakukan dereferensi ekspresi pointer, didapatkan nilai yang ditunjukkan oleh ekspresi dari suatu pointer, dimana pointer to array akan menunjuk ke nilai array itu sendiri, sehingga pada dereferensi yang sedang terjadi didapatkan nilai array dan nama array yang menunjuk ke alamat dasar tersebut. Jadi, setiap kali pointer to array direferensikan, maka akan didapatkan alamat dasar dari array yang ditunjuknya.
Contoh:
#include <stdio.h>
int main()
{
int arr[5] = { 1, 2, 3, 4, 5 };
int *ptr = arr;
printf ("\n %d",&ptr);
return 0;
}
Pada contoh program sebelumnya, terdapat pointer ptr yang menunjuk ke elemen ke-0 dari suatu array. Hal ini sama saja dengan cara pendeklarasian sebuah pointer yang dapat menunjuk ke seluruh bagian array ketimbang hanya menunjuk salah satu dari elemen yang dimiliki oleh array tersebut. Pointer jenis ini sangat berguna ketika membahas tentang array multidimensi.
Sintak:
data_type (*var_name)[size_of_array];
Contoh Penulisan Pointer Ke Array:
int (*ptr)[10];
Pada contoh tersebut terdapat sebuah pointer dengan nama ptr yang mengarah ke array dari sepuluh nilai integer. Karena subscript memiliki nilai precedensi yang lebih besar dari nilai indireksi, maka sangat penting untuk dilakukan enclose operator indireksi dan nama pointer yang terdapat di dalam tanda kurung. Berikut adalah tipe dari pointer untuk jenis 'pointer ke array dari sepuluh integer'.
Catatan: pointer yang menunjuk ke elemen ke-0 dari suatu array dan pointer yang menunjuk ke seluruh elemen array memiliki perbedaan jenis array, seperti diperlihatkan pada contoh berikut.
Tipe dasar dari p adalah integer, sementara tipe dasar dari ptr adalah array dari lima integer. Pada konsep pointer to array diketahui bahwa aritmatika pointer ditampilkan secara relatif ke ukuran dasarnya, sehingga jika ditulis ptr++, maka pointer ptr akan digeser ke depan sebanyak 20 byte.
Tipe dasar dari p adalah integer, sementara tipe dasar dari ptr adalah array dari lima integer. Pada konsep pointer to array diketahui bahwa aritmatika pointer ditampilkan secara relatif ke ukuran dasarnya, sehingga jika ditulis ptr++, maka pointer ptr akan digeser ke depan sebanyak 20 byte.
Baca Juga:
Ketika dilakukan dereferensi ekspresi pointer, didapatkan nilai yang ditunjukkan oleh ekspresi dari suatu pointer, dimana pointer to array akan menunjuk ke nilai array itu sendiri, sehingga pada dereferensi yang sedang terjadi didapatkan nilai array dan nama array yang menunjuk ke alamat dasar tersebut. Jadi, setiap kali pointer to array direferensikan, maka akan didapatkan alamat dasar dari array yang ditunjuknya.
Pointer dan Array Dua Dimensi
Pada array dua dimensi, dapat dilakukan akses ke setiap elemen yang dimiliki oleh suatu array dengan menggunakan dua subscripts, dimana subscript pertama merepresentasikan nilai baris dan subscript kedua merepresentasikan nilai kolom. Elemen dari array dua dimensi dapat diakses dengan bantuan dari notasi pointer.
Misalkan arr adalah array dua dimensi, maka dapat dilakukan akses ke elemen apa saja pada array arr[i][j], yang berasal dari array yang menggunakan ekspresi pointer *(*(arr + i) + j). Perhatikan contoh ekspresi berikut:
Dibuat sebuah array dua dimensi sebagai berikut arr[3][4]:
int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
Karena memori pada komputer diatur secara linier, maka tidak mungkin dilakukan penyimpanan array dua dimensi dalam baris dan kolom. Jadi, konsep baris dan kolom pada array dua dimensi hanya konsep teoretis saja, sebenarnya, array dua dimensi yang disimpan ditempatkan pada urutan baris utama, dimana baris-baris tersebut ditempatkan secara bersebelahan.
Setiap baris dapat dianggap sebagai array satu dimensi, sehingga array dua dimensi dapat dianggap sebagai kumpulan dari array satu dimensi yang ditempatkan satu demi satu secara berurutan. Dengan kata lain, array dua dimensi merupakan arrau satu dimensi yang ditempatkan secara berurutan satu demi satu. Pada contoh yang diperlihatkan sebelumnya, diberitahukan bahwa array arr merupakan array tiga elemen, dimana setiap elemen yang terdapat pada array tersebut merupakan array satu dimensi dari 4 bilangan bulat.
Diketahui pula bahwa, array merupakan pointer konstan yang menunjuk ke array satu dimensi pada elemen ke-0 dan berisi alamat 5000. Karena arr adalah 'pointer ke array 4 bilangan bulat', maka menurut aturan aritmatika pointer, ekspresi arr + 1 akan mewakili alamat 5016 dan ekspresi arr + 2 akan mewakili alamat 5032.
Jadi, dapat dikatakan bahwa arr menunjuk ke array satu dimensi dari elemen ke-0, sedangkan arr + 1 menunjuk ke array satu dimensi elemen ke-1, dan arr + 2 menunjuk ke array satu dimensi pada elemen ke-2.
Secara Umum Penulisan Pointer Ke Array, diperlihatkan sebagai berikut:
arr + i menunjuk ke elemen array
Karena arr + i menunjuk ke elemen ke-i dari arr, maka pada dereferensi akan didapatkan elemen ke-i dari arr yang tentu saja merupakan array satu dimensi. Jadi ekspresi *(arr + i) tersebut akan memberikan nilai dari alamat dasar dari array satu dimensi ke ke-i.
Ekspresi penunjuk *(arr + i) setara dengan ekspresi subskrip arr[i]. Jadi, *(arr + i) yang sama dengan nilai arr[i] akan memberi alamat dasar dari array satu dimensi ke ke-i. Untuk mengakses elemen individu dari larik 2-D kita, kita harus dapat mengakses elemen ke-j dari larik 1-D ke-i. Karena tipe dasar dari *(arr + i) adalah int dan berisi alamat elemen ke-0 dari array satu dimensi ke-i, maka bisa didapatkan alamat dari elemen berikutnya dalam array satu dimensi dengan menambahkan nilai bilangan bulat ke *( arr + i). Misalnya, *(arr + i) + 1 akan mewakili alamat elemen pertama dari elemen 1 dari array satu dimensi ke-i dan *(arr+i)+2 akan mewakili alamat elemen ke-2 dari array satu dimensi ke-i. Demikian pula *(arr + i) + j akan mewakili alamat elemen j dari array satu dimensi ke-i.
Pointer dan Array Tiga Dimensi
Pada array tiga dimensi, dapat dilakukan akses untuk setiap elemen dengan menggunakan tiga subscripts.
Perhatikan array tiga dimensi tipe integer berikut int arr[2][3][2] = { {{5, 10}, {6, 11}, {7, 12}}, {{20, 30}, { 21, 31}, {22, 32}}};
Array tiga dimensi yang telah dibuat tersebut, kemudian dianggap array ketiga sebagai array dua dimensi, dimana setiap elemen array tiga dimensi dianggap sebagai array dua dimensi. Array tiga dimensi dapat dianggap sebagai array yang terdiri dari dua elemen dimana setiap elemen adalah array dua dimensi. Nama array arr merupakan penunjuk ke array dua dimensi pada elemen ke-0.
Jadi, ekspresi penunjuk *(*(*(arr + i ) + j ) + k) adalah setara dengan ekspresi subskrip arr[i][j][k]. Dimana ekspresi *(arr + i) adalah setara dengan arr[i], dan ekspresi *(*(arr + i) + j) adalah setara dengan arr[i][j]. Sehingga dapat dikatakan bahwa arr[i] merepresentasikan alamat dasar dari array dua dimensi pada elemen ke-i dan arr[i][j] merepresentasikan alamat dasar dari array satu dimensi pada elemen ke-j.
Subscripting Pointer ke Array
Misalkan arr adalah array dua dimensi dengan 3 baris dan 4 kolom, dan ptr adalah pointer ke array 4 bilangan bulat, dimana ptr berisi alamat dasar dari array arr.
int arr[3][4] = {{10, 11, 12, 13}, {20, 21, 22, 23}, {30, 31, 32, 33}};
int (*ptr)[4];
ptr = arr;
Karena ptr adalah pointer ke array 4 bilangan bulat, maka ptr + i akan menunjuk ke baris ke-i.
Pada dereferensi ptr + i, akan didapatkan alamat dasar dari baris ke-i. Dimana untuk mengakses alamat elemen ke-j dari baris ke-i, maka dapat ditambahkan j ke ekspresi pointer *(ptr + i). Jadi, ekspresi penunjuk *(ptr + i) + j memberikan alamat elemen ke-j dari baris ke-i, dan ekspresi penunjuk *(*(ptr + i)+j) memberikan nilai dari elemen ke-j dari baris ke-i.
Tidak hanya itu, diketahui pula bahwa ekspresi penunjuk *(*(ptr + i) + j) adalah setara dengan ekspresi subskrip ptr[i][j]. Jadi, jika dimiliki variabel pointer yang berisi alamat dasar array 2-D, maka dapat dilakukan akses ke elemen-elemen array dengan menggandakan subskrip variabel pointer tersebut.
Misalkan arr adalah array dua dimensi, maka dapat dilakukan akses ke elemen apa saja pada array arr[i][j], yang berasal dari array yang menggunakan ekspresi pointer *(*(arr + i) + j). Perhatikan contoh ekspresi berikut:
Dibuat sebuah array dua dimensi sebagai berikut arr[3][4]:
int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
Karena memori pada komputer diatur secara linier, maka tidak mungkin dilakukan penyimpanan array dua dimensi dalam baris dan kolom. Jadi, konsep baris dan kolom pada array dua dimensi hanya konsep teoretis saja, sebenarnya, array dua dimensi yang disimpan ditempatkan pada urutan baris utama, dimana baris-baris tersebut ditempatkan secara bersebelahan.
Setiap baris dapat dianggap sebagai array satu dimensi, sehingga array dua dimensi dapat dianggap sebagai kumpulan dari array satu dimensi yang ditempatkan satu demi satu secara berurutan. Dengan kata lain, array dua dimensi merupakan arrau satu dimensi yang ditempatkan secara berurutan satu demi satu. Pada contoh yang diperlihatkan sebelumnya, diberitahukan bahwa array arr merupakan array tiga elemen, dimana setiap elemen yang terdapat pada array tersebut merupakan array satu dimensi dari 4 bilangan bulat.
Diketahui pula bahwa, array merupakan pointer konstan yang menunjuk ke array satu dimensi pada elemen ke-0 dan berisi alamat 5000. Karena arr adalah 'pointer ke array 4 bilangan bulat', maka menurut aturan aritmatika pointer, ekspresi arr + 1 akan mewakili alamat 5016 dan ekspresi arr + 2 akan mewakili alamat 5032.
Jadi, dapat dikatakan bahwa arr menunjuk ke array satu dimensi dari elemen ke-0, sedangkan arr + 1 menunjuk ke array satu dimensi elemen ke-1, dan arr + 2 menunjuk ke array satu dimensi pada elemen ke-2.
Secara Umum Penulisan Pointer Ke Array, diperlihatkan sebagai berikut:
arr + i menunjuk ke elemen array
Karena arr + i menunjuk ke elemen ke-i dari arr, maka pada dereferensi akan didapatkan elemen ke-i dari arr yang tentu saja merupakan array satu dimensi. Jadi ekspresi *(arr + i) tersebut akan memberikan nilai dari alamat dasar dari array satu dimensi ke ke-i.
Ekspresi penunjuk *(arr + i) setara dengan ekspresi subskrip arr[i]. Jadi, *(arr + i) yang sama dengan nilai arr[i] akan memberi alamat dasar dari array satu dimensi ke ke-i. Untuk mengakses elemen individu dari larik 2-D kita, kita harus dapat mengakses elemen ke-j dari larik 1-D ke-i. Karena tipe dasar dari *(arr + i) adalah int dan berisi alamat elemen ke-0 dari array satu dimensi ke-i, maka bisa didapatkan alamat dari elemen berikutnya dalam array satu dimensi dengan menambahkan nilai bilangan bulat ke *( arr + i). Misalnya, *(arr + i) + 1 akan mewakili alamat elemen pertama dari elemen 1 dari array satu dimensi ke-i dan *(arr+i)+2 akan mewakili alamat elemen ke-2 dari array satu dimensi ke-i. Demikian pula *(arr + i) + j akan mewakili alamat elemen j dari array satu dimensi ke-i.
Pointer dan Array Tiga Dimensi
Pada array tiga dimensi, dapat dilakukan akses untuk setiap elemen dengan menggunakan tiga subscripts.
Perhatikan array tiga dimensi tipe integer berikut int arr[2][3][2] = { {{5, 10}, {6, 11}, {7, 12}}, {{20, 30}, { 21, 31}, {22, 32}}};
Array tiga dimensi yang telah dibuat tersebut, kemudian dianggap array ketiga sebagai array dua dimensi, dimana setiap elemen array tiga dimensi dianggap sebagai array dua dimensi. Array tiga dimensi dapat dianggap sebagai array yang terdiri dari dua elemen dimana setiap elemen adalah array dua dimensi. Nama array arr merupakan penunjuk ke array dua dimensi pada elemen ke-0.
Jadi, ekspresi penunjuk *(*(*(arr + i ) + j ) + k) adalah setara dengan ekspresi subskrip arr[i][j][k]. Dimana ekspresi *(arr + i) adalah setara dengan arr[i], dan ekspresi *(*(arr + i) + j) adalah setara dengan arr[i][j]. Sehingga dapat dikatakan bahwa arr[i] merepresentasikan alamat dasar dari array dua dimensi pada elemen ke-i dan arr[i][j] merepresentasikan alamat dasar dari array satu dimensi pada elemen ke-j.
Subscripting Pointer ke Array
Misalkan arr adalah array dua dimensi dengan 3 baris dan 4 kolom, dan ptr adalah pointer ke array 4 bilangan bulat, dimana ptr berisi alamat dasar dari array arr.
int arr[3][4] = {{10, 11, 12, 13}, {20, 21, 22, 23}, {30, 31, 32, 33}};
int (*ptr)[4];
ptr = arr;
Karena ptr adalah pointer ke array 4 bilangan bulat, maka ptr + i akan menunjuk ke baris ke-i.
Pada dereferensi ptr + i, akan didapatkan alamat dasar dari baris ke-i. Dimana untuk mengakses alamat elemen ke-j dari baris ke-i, maka dapat ditambahkan j ke ekspresi pointer *(ptr + i). Jadi, ekspresi penunjuk *(ptr + i) + j memberikan alamat elemen ke-j dari baris ke-i, dan ekspresi penunjuk *(*(ptr + i)+j) memberikan nilai dari elemen ke-j dari baris ke-i.
Tidak hanya itu, diketahui pula bahwa ekspresi penunjuk *(*(ptr + i) + j) adalah setara dengan ekspresi subskrip ptr[i][j]. Jadi, jika dimiliki variabel pointer yang berisi alamat dasar array 2-D, maka dapat dilakukan akses ke elemen-elemen array dengan menggandakan subskrip variabel pointer tersebut.
Referensi Tambahan:
- Anggota Structure, Padding, dan Data Packing Bahasa C [klik]
- Operasi Pada Variabel Struct Bahasa C [klik]
- Bit Fields Bahasa C Beserta Penjelasannya [klik]
- Anggota Array Fleksibel Struct Pada Bahasa C [klik]
- Perbedaan Antara Struct dan Union pada Bahasa C [klik]
- Perbedaan Struct Bahasa C dan C++ [klik]
- Anonimus Union dan Struct Bahasa C dan Penjelasannya [klik]
Artikel ini didedikasikan kepada: Ahmad Choirul Umam, Alif Kusuma Dharu, Ana Sofiana, Anggreani Eka Lestari, dan Cuwi Nurti Ningrum.
- Dapatkan link
- Aplikasi Lainnya
Komentar
Posting Komentar
Hubungi admin melalui Wa : +62-896-2514-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 ~
Postingan populer dari blog ini (30 Hari)
Kesalahan Pengujian Hipotesis Statistika Penelitian
Dipublikasikan Oleh
elfanmauludi
Enkapsulasi Java dan Fungsinya
Dipublikasikan Oleh
elfanmauludi
Enkapsulasi didefinisikan sebagai pembungkusan data dalam satu buah unit. Enkapsulasi adalah mekanisme yang mengikat code program dan data yang dimanipulasi secara bersamaan pada bahasa pemrograman Java. Cara lain untuk berpikir mengenai enkapsulasi adalah upaya untuk melindungi atau sebagai perisai proteksi yang mencegah data untuk diakses oleh pihak luar.
Penelitian Berdasarkan Tingkat Eksplanasinya
Dipublikasikan Oleh
elfanmauludi
Kegiatan penelitian merupakan upaya yang paling komprehensif untuk melatih mahasiswa berpikir kritis dan bertindak sistematis. Penelitian didefinisikan sebagai suatu kegiatan penyelidikan dan pencarian fakta-fakta dari sebuah realita yang bertujuan untuk mengeksplorasi, mengembangkan, dan menguji serta membandingkan sebuah teori atau pengetahuan sehingga dapat menentukan konsep yang paling tepat sebagai solusi pemecahan masalah yang ada.
Judul Penelitian Tindakan Kelas dan Tahapan Siklusnya
Dipublikasikan Oleh
elfanmauludi
Siklus atau putaran merupakan tahapan dari serangkaian proses dalam kegiatan penelitian, yang dimulai dari tahapan perencanaan, persiapan, pelaksanaan, hingga tahapan akhir adalah evaluasi . Jika makna tersebut dikaitkan dengan Penelitian Tindakan Kelas (PTK) maka yang dimaksud dengan siklus adalah satu putaran penuh dari tahapan-tahapan dalam kegiatan PTK . Jadi, satu siklus pada kegiatan Penelitian (PTK) adalah tahapan yang dimulai dari tahap perencanaan, pengamatan, dan refleksi .
Download Buku SMA Kurikulum Merdeka Tahun Ajaran 2023 2024
Dipublikasikan Oleh
elfanmauludi
Buku Sekolah Elektronik atau BSE merupakan buku mata pelajaran yang disediakan oleh pemerintah Indonesia melalui lembaga Kementrian bidang Pendidikan yang dibagikan kepada para guru di seluruh tanah air Indonesia, yang bertujuan untuk menunjang kegiatan belajar mengajar yang dilakukan oleh guru dan peserta didik di seluruh pelosok Indonesia. Buku Sekolah Elektronik atau BSE merupakan buku yang disiapkan oleh Pemerintah Indonesia untuk pemenuhan kebutuhan buku pendidikan yang dipergunakan secara terbatas pada seluruh Sekolah yang ada di tanah air Indonesia.
Paradigma Penelitian pada Statistika Penelitian
Dipublikasikan Oleh
elfanmauludi
Pada kegiatan penelitian kuantitatif yang berlandaskan pada sebuah asumsi kejadian yang tidak dapat diklasifikasikan, serta korelasi kejadian yang bersifat kausal sebab akibat, maka seorang peneliti dapat memfokuskan kegiatannya pada pengamatan beberapa variabel saja . Korelasi pola pada setiap variael yang diamati tersebut selanjutnya akan dikenal sebagai paradigma penelitian atau model penelitian .
Pengertian Asosiasi Komposisi dan Agregasi Java
Dipublikasikan Oleh
elfanmauludi
Membuat Rumus Matematika Bahasa C Menggunakan Library Math.h
Dipublikasikan Oleh
elfanmauludi
Penggunaan fflush(stdin) Bahasa C dan Fungsinya
Dipublikasikan Oleh
elfanmauludi
Leger Nilai Peserta Didik Angkatan Tahun Masuk 2020 2021 - 2022 2023
Dipublikasikan Oleh
elfanmauludi
Postingan populer dari blog ini (All Time)
Cara Menggunakan Method Overloading Java dan Fungsinya
Dipublikasikan Oleh
elfanmauludi
Overloading memungkinkan berbagai method yang berbeda untuk memiliki nama yang sama, tetapi dengan signature yang berbeda pada bahasa pemrograman Java. Signature dapat berbeda oleh angka dari input parameter atau tipe dari input parameter atapun juga keduanya. Overloading juga berkaitan dengan compile time (atau static ) polymorphism .
Enkapsulasi Java dan Fungsinya
Dipublikasikan Oleh
elfanmauludi
Enkapsulasi didefinisikan sebagai pembungkusan data dalam satu buah unit. Enkapsulasi adalah mekanisme yang mengikat code program dan data yang dimanipulasi secara bersamaan pada bahasa pemrograman Java. Cara lain untuk berpikir mengenai enkapsulasi adalah upaya untuk melindungi atau sebagai perisai proteksi yang mencegah data untuk diakses oleh pihak luar.
Acces Modifier Java dan Fungsinya
Dipublikasikan Oleh
elfanmauludi
Menerima Turunan Program Java Menggunakan Inheritance
Dipublikasikan Oleh
elfanmauludi
Operator Relasi dan Logika Bahasa C dan Fungsinya
Dipublikasikan Oleh
elfanmauludi
Apa yang dimaksud dengan pointer to array pada Bahasa C?
BalasHapusPointer to array bahasa C merupakan suatu memori penunjuk yang digunakan untuk menunjuk alamat blok memori dari suatu variabel array.
HapusApa yang dimaksud dengan konsep pointer ke Array Bahasa C?
BalasHapusKonsep dari penerapan pointer to array bahasa C adalah suatu proses penggunaan pointer ke array yang kemudian digunakan untuk mengakses elemen pada array yang ditunjuk tersebut.
HapusApa perbedaan antara array to pointer dan pointer to array pada Bahasa C?
BalasHapusPada pointer to array, pointer digunakan untuk menyimpan alamat dari setiap array yang diberikan atau ditunjuk oleh pointer, sedangkan pada konsep array to pointer, maka array tersebut bertugas untuk menyimpan nilai dari variabel pointer.
Hapus