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
- Variabel Length Array Bahasa C dan Fungsinya [klik]
- Notasi Shorthand Array Bahasa C dan Fungsinya [klik]
- Mengakses Array di Luar Batas Bahasa C [klik]
- Strcpy Bahasa C dan Fungsinya [klik]
- Membandingkan Dua String Menggunakan STRCMP pada Bahasa C [klik]
- Menduplikasi Nilai String Menggunakan STRDUP dan STRNDUP pada Bahasa C [klik]
- Melewatkan Nilai Array Melalui Value pada Bahasa C [klik]
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