Alokasi Array Dinamis Dua Dimensi Bahasa C
05 06 07 08
09 10 11 12
Alokasi Dinamis Array 2D Menggunakan Single Pointer: Cara sederhana untuk alokasi memori blok dari ukuran r*c dan akses elemen menggunakan aritmatika pointer sederhana.
#include <stdio.h>
#include <stdlib.h>
void main()
{
// Mengambil angka dari baris
// dan kolom
int r=3, c=4;
int *ptr, count = 0, i;
// Alokasi Memori Dinamis
ptr = (int *)malloc((r * c) * sizeof(int));
for (i = 0; i < r * c; i++)
{
// Memberikan nilai ke ponter
// dan mencetaknya secara
// simultan.
ptr[i] = i + 1;
printf("%d ", ptr[i]);
if ((i + 1) % c == 0)
{printf("\n");}
}
free(ptr);
}
Output:1 2 3 4
5 6 7 8
9 10 11 12
Alokasi Dinamis Array 2D Menggunakan Array Pointer: Dengan menggunakan C99, maka dapat diciptakan array pointer dari ukuran r. Bahasa C memungkinkan untuk menciptakan array yang berukuran sama dengan variabel, dimana setelah array pointer tersebut dibuat, maka dapat dilakukan pengalokasian memori secara dinamis untuk setiap baris.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int r=3, c=4, i, j, count;
int *arr[r];
for (i=0; i<r; i++)
arr[i] = (int *)malloc(c * sizeof(int));
// Catatan, arr[i][j] adalah
// sama dengan *(*(arr+i)+j)
count = 0;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
arr[i][j] = ++count;
// atau *(*(arr+i)+j) =
// ++count
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
printf("%d ", arr[i][j]);
// Kode lanjutan untuk preses
// alokasi memori dinamis dan
// pembebasan memorinya
return 0;
}
Output:1 2 3 4 5 6 7 8 9 10 11 12
Alokasi Dinamis Array 2D Menggunakan Pointer to Pointer: Dapat pula diciptakan array dinamis menggunakan pointer ganda. Setelah diciptakan array pointer yang dialokasikan secara dinamis, maka dapat dilakukan pengalokasian memori secara dinamis untuk setiap baris seperti diperlihatkan sebagai berikut.
Contoh:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int r=3, c=4, i, j, count;
int **arr = (int **)malloc(r * sizeof(int *));
for (i=0; i<r; i++)
arr[i] = (int *)malloc(c * sizeof(int));
// Catatan, arr[i][j] adalah
// *(*(arr+i)+j)
count = 0;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
// atau *(*(arr+i)+j) =
// ++count
arr[i][j] = ++count;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
printf("%d ", arr[i][j]);
// Kode lanjutan untuk preses
// alokasi memori dinamis dan
// pembebasan memorinya
return 0;
}
Output:1 2 3 4 5 6 7 8 9 10 11 12
Alokasi Dinamis Array 2D Menggunakan double pointer dan satu panggilan malloc:
Contoh:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int r=3, c=4, len=0;
int *ptr, **arr;
int count = 0,i,j;
len = sizeof(int *) * r + sizeof(int) * c * r;
arr = (int **)malloc(len);
// ptr menunjuk ke elemen
// pertama dalam array 2D
ptr = (int *)(arr + r);
// looping menunjuk ke pointer
// row untuk lokasi yang
// sesuai pada array 2D
for(i = 0; i < r; i++)
arr[i] = (ptr + c * i);
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
// atau *(*(arr+i)+j) =
// ++count
arr[i][j] = ++count;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
printf("%d ", arr[i][j]);
return 0;
}
Output:1 2 3 4 5 6 7 8 9 10 11 12
- 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
- Berbagai Metode Untuk Melakukan Reversi String pada Bahasa C
5 komentar untuk "Alokasi Array Dinamis Dua Dimensi Bahasa C"
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 -
Apa yang dimaksud dengan alokasi memori dinamis pada Bahasa C?
BalasHapusAlokasi memori dinamis pada Bahasa C adalah istilah yang mengacu pada manajemen memori secara manual untuk alokasi memori yang sifatnya dinamis pada pemrograman bahasa C melalui sekelompok fungsi dalam library standard C, yaitu malloc, realloc, calloc, dan free. Performanya dari alokasi memori dinamis sifatnya bervariasi terhadap waktu eksekusi program dan ukuran memori yang dibutuhkan.
HapusAlokasi memori dinamis merukanan sebuah program pelaksana yang meminta sistem operasi untuk memberikan blok memori utama. Program selanjutnya menggunakan memori tersebut untuk beberapa tujuan tertentu yang telah diprogram. Heap dapat mengembangkan "holes" dimana memori yang dialokasikan sebelumnya telah dikembalikan diantara blok memori yang masih digunakan pada Bahasa C.
HapusApa fungsi calloc dan malloc pada alokasi memori dinamis pada Bahasa C?
BalasHapusAlokasi memori dinamis memungkinkan program bahasa C untuk mengalokasikan memori saat runtime. Fungsi berbeda yang digunakan untuk mengalokasikan memori secara dinamis pada saat runtime adalah malloc() yang mengalokasikan blok memori dalam satuan byte ketika runtime, dan calloc() yang mengalokasikan blok memori secara terus menerus pada saat runtime.
Hapus