pointer dan contoh program-pens
Embed Size (px)
TRANSCRIPT

POINTER
I DEFINISI
Pointer adalah variabel yang menyimpan alamat memory dari variabel yang
ditunjuk Dengan kata lain pointer berisi alamat dari variable yang mempunyai
nilai tertentu Misalnya kita mempunyai variabel x yang bertipe int maka untuk
mendapatkan alamat dari variabel x tersebut adalah dengan menambahkan tanda
amp di depannya yaitu ampx
Pointer secara sederhana bisa diartikan sebagai tipe data yang nilainya
mengarah pada nilai yang terdapat pada sebuah area memori (alamat
memori)Namun dalam bahasa C pointer bisa berfungsi sebagai variabel array
berarti pointer sebagai penunjuk elemen array ke-0 dalam variabel C
Dengan demikian ada variabel yang secara langsung menunjuk ke suatu
nilai tertentu dan variabel yang secara tidak langsung menunjuk ke nilai
Adapun bentuk umum dari pernyataan variabel pointer dalam C++ adalah
Type variabel-name
Keterangan
Type adalah tipe dari data yang ditunjuk bukan tipe dari pointer-nya
Contoh int data
berarti data adalah sebuah pointer yang menunjuk ke jenis data integer
Variabel name adalah nama variabel pointer misal pi dapat diartikan
nama variable pointer pada variable i
Operator yang digunakan untuk pointer adalah
- Operator dereference dilambangkan tanda ldquoamprdquo (ampersand sign)
- Operator reference dilambangkan tanda ldquordquo (asterisk)
tanda ldquordquo ini berfungsi sebagai penunjuk nilai dari suatu pointer
sedangkan tandaldquoamprdquo digunakan sebagai penunjuk alamat dari suatu
variable
Ingat perbedaan mengisi alamat dan mengisi data pada pointer ada
pada tanda bintang di depan nama pointer Jika menggunakan tanda
bintang itu artinya kita mengisi data namun jika tidak menggunakan
tanda bintang itu artinya kita mengisi alamat memori Begitu juga
dengan menampilkan nilai di layar monitor jika kita menyertakan
tanda bintang maka yang akan ditampilkan adalah data dari alamat
memori yang ditunjuk pointer namun jika tidak menggunakan tanda
bintang maka yang akan ditampilkan adalah alamat memori dari
pointer tersebut
A Operator Dereference
Pada pendeklarasian variable user tidak diharuskan menentukan lokasi
sesungguhnya pada memory Hal ini akan dilakukan secara otomatis oleh
compiler dan operating system pada saat run-time Jika ingin mengetahui di mana
suatu variable disimpan dapat dilakukan dengan memberikan tanda ampersand
(amp) di depan variable yang berarti ldquoaddress ofrdquo
Contoh
Buku = ampbahasa
Akan memberikan variabel buku alamat dari bahasa karena variable bahasa diberi
awalan ampersand (amp) maka menjadi pokok disini adalah alamat dalam
memory bukan isi variable Misalkan bahasa diletakkan di alamat 1776
kemudian dituliskan instruksi sbb
Bahasa = 25 nilai Bahasa 25
Sejarah = bahasa
buku = ampbahasa nilai buku adalah alamat dari bahasa
Maka hasilnya Bahasa
25
1775 1776 1777
Sejarah Buku
B Operator Reference
Dengan menggunakan pointer kita dapat mengakses nilai yang tersimpan secara
langsung dengan memberikan awalan operator asterisk() pada identifier pointer
yang berarti ldquovalue pointed byrdquo
Contoh
BhsC = buku
(dapat dikatakan bahwa BhsC sama dengan nilai yang ditunjuk oleh buku) BhsC
= 25 karena buku di alamat 1776 dan nilai yang berada pada alamat 1776 adalah
25
OPERATOR PENUGASAN
Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain
bull Contoh
25 1776
y = 65
x1 = ampy
X2 = x1
POINTER KE POINTER
Adalah pointer yang menunjuk ke pointer lain yang berisi alamat yang
ditempati oleh pointer yang sedang menunjuk ke variable lain tersebut atau sering
disebut multiple indirection Cara mendeklarasikan adalah dengan menambah
tanda asterisk () sebanyak dua kali di depan nama pointer yang akan
dideklarasikan
Bentuk umum
Misal pointer P menunjuk ke alamat dari variable a bertipe integer
sedangkan B dideklarasikan menunjuk alamat dari pointer P
a = 5 P=ampa B=ampP maka B nilainya sama dengan nilai pada alamat
yang ditunjuk oleh pointer P (ampa) Dapat disimpulkan bahwa nilai dari
variable a (yaitu 5) dapat diakses melalui pointer P dengan cara
menuliskan P dan menggunakan pointer B dengan cara menuliskan B
POINTER PADA ARRAY
Dalam pemrograman C definisi array dituliskan
type_name array_name[number_of_array]
misal array A bertipe integer dengan 10 anggota didefinisikan dengan
int A[10]
Maksud dari penulisan diatas maka kita memerintahkan kompiler untuk
menyediakan alamat memori sebesar 10 sizeof(int) Bila ukuran int
adalah 4 byte maka compiler akan mengalokasikan sebesar 10 4 byte =
40 byte memori untuk A
misalnya alamat awal Array A (A[0]) adalah 0xFFFF0000 maka dapat digambarkan
A[0] 0xFFFF0000
A[1] 0xFFFF0004
A[2] 0xFFFF0008
hellip hellip
A[7] 0xFFFF001C
A[8] 0xFFFF0020
A[9] 0xFFFF0024
pointer pada array sesungguhnya kita juga memerintahkan pointer agar menunjuk ke alamat yang telah dialokasikan oleh array tersebut Pada contoh diatas bila kita mendefinisikan suatu pointer
int P
kemudian kita tunjuk ke alamat Array A
P = ampA[0]
maka alamat P akan menunjuk ke alamat 0xFFFF0000
Pada suatu tipe data array variabel pointer hanya perlu menunjuk pada
nama variabel arraynya saja tanpa perlu menggunakan tanda ampersand
atau menunjuk pada nama variabel array pada indeks yang ke nol nya
Nama array tanpa index adalah pointer ke elemen pertama dari array
Untuk lebih jelasnya coba program berikut ini
Hasil dari
for(index=0indexlt10 index ++) printf(3d nilai[index]) cetak Array
dengan
ip=ampnilai[0] variable pointer yg menunjuk alamat dari array nilai ke 0
for(index=0 indexlt10 index++) printf(3d ip++) cetak pointer
adalah sama
Hal ini berarti dapat kita simpulkan bahwa
1 Kita dapat membaca isi dari suatu array melalui suatu pointer asalkan pointer
tersebut menunjuk ke alamat dari array yang ingin kita baca
2 Increment dari pointer yang menunjuk ke array adalah sam dengan increment
index (posisi) dari array yang ditunjuk
Array dari Pointer (Array of Pointer)
Suatu array bisa digunakan untuk menyimpan sejumlah pointer Sebagai
contoh
char namahari[10]
merupakan pernyataan untuk mendeklarasikan array pointer Array namahari
terdiri dari 10 elemen berupa pointer yang menunjuk ke data bertipe char
Array pointer bisa diinisialisasi sewaktu pendeklarasian Sebagai contoh
static char namahari[] =
ldquoSeninrdquo
ldquoSelasardquo
ldquoRaburdquo
ldquoKamisrdquo
ldquoJumatrdquo
ldquoSabturdquo
ldquoMinggurdquo
Pada contoh ini
namahari[0] berisi alamat yang menunjuk ke string ldquoSeninrdquo
namahari[1] berisi alamat yang menunjuk ke string ldquoSelasardquo
namahari[2] berisi alamat yang menunjuk ke string ldquoRaburdquo dan sebagainya
II POINTER PADA STRING
Fungsi string yang mempunyai parameter berupa string hanya mengirimkan
alamatnya bukan stringnya sendiri
Contoh
include ltstdiohgtmain() char s[80]char pint iclrscr()printf(Masukkan dua buah kalimat ) gets(s)for (i=0 s[i] ampamp s[i] = i++)p=amps[i+1]printf(Kalimat keduanya adalah n)printf(p)getch()
Hasil
Keterangan
1048707 Pada pengulangan for akan berhenti jika pada string tersebut ditemukan
karakter titik atau null
1048707 Pernyataan p=amps[i+1] akan menunjuk ke karakter sesudah titik atau null
Misalnya karakter kelima adalah titik maka p akan menunjuk ke karakter ke
enam Pernyataan tersebut dapat diganti dengan p=amps[i]+1
III POINTER ARITMATIKA
Elemen-elemen array biasanya diakses melalui indeksnya sebenarnya ada
cara lain yang lebih efisien yaitu dengan menggunakan pointer Pointer semacam
ini disebut dengan istilah pointer aritmetika Konsep dasar dari pointer aritmetika
ini adalah melakukan operasi aritmetika terhadap variabel yang bertipe pointer
Misalnya kita mempunyai 5 buah data bertipe int yang disimpan dalam bentuk
array dengan nama A dan digambarkan sebagai berikut
24 32 81 44 23
PP+3
Jika kita mempunyai pointer p maka kita dapat mengakses elemen-elemen array
di atas dengan cara melakukan operasi terhadap p
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan
nilai integer saja Operasi yang biasa dilakukan adalah operasi penambahan dan
pengurangan Operasi penambahan dengan suatu nilai menunjukkan lokasi data
berikutnya (index selanjutnya) dalam memori Begitu juga operasi pengurangan
Contoh
Hasil
Isi p1 sebelum ditambah adalah 65494
Isi p1 sesudah ditambah adalah 65496
Isi p2 sebelum dikurangi adalah 65494
Isi p2 sesudah dikurangi adalah 65492
Isi p2 sesudah ditambah dengan 5 adalah 65502
Keterangan
main() int a p1 p2clrscr()a=5 p1=ampaprintf(n Isi p1 sebelum ditambah adalah 5u p1)p1++printf(n Isi p1 sesudah ditambah adalah 5u p1)p2=ampaprintf(n Isi p2 sebelum dikurangi adalah 5u p2)p2--printf(n Isi p2 sesudah dikurangi adalah 5u p2)p2 = p2 + 5printf(n Isi p2 sesudah ditambah dengan 5 adalah 5u p2)getch()
1048707 Variabel a bertipe int variabel p1 dan p2 adalah pointer yang menunjuk ke
variabel int
1048707 Pernyataan p1++ menyebabkan p1 bertambah dengan 2 sebab variabel integer
berukuran 2 byte juga dengan p2-- akan berkurang 2
1048707 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
IV ARITMATIKA PADA POINTER DAN ARRAY
Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0] maka P+1 =
ampA[1] P+2 = ampA[2] dan seterusnya Dari gambaran diatas melakukan
operasi aritmatika terhadap pointer P yang berhubungan dengan array A
(dalam hal ini operasi penjumlahan) proses seperti ini dinamakan
ldquoAritmatika Pointer dan arrayrdquo
Contoh
Maka statement P2 ndash P1 menghasilkan nilai 3 karena selisih letak alamat
memori antara yang ditunjuk oleh pointer P2 dan P1 Untuk
membuktikannya kita implementasikan pada sebuah program sebagai
berikut
Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

berarti data adalah sebuah pointer yang menunjuk ke jenis data integer
Variabel name adalah nama variabel pointer misal pi dapat diartikan
nama variable pointer pada variable i
Operator yang digunakan untuk pointer adalah
- Operator dereference dilambangkan tanda ldquoamprdquo (ampersand sign)
- Operator reference dilambangkan tanda ldquordquo (asterisk)
tanda ldquordquo ini berfungsi sebagai penunjuk nilai dari suatu pointer
sedangkan tandaldquoamprdquo digunakan sebagai penunjuk alamat dari suatu
variable
Ingat perbedaan mengisi alamat dan mengisi data pada pointer ada
pada tanda bintang di depan nama pointer Jika menggunakan tanda
bintang itu artinya kita mengisi data namun jika tidak menggunakan
tanda bintang itu artinya kita mengisi alamat memori Begitu juga
dengan menampilkan nilai di layar monitor jika kita menyertakan
tanda bintang maka yang akan ditampilkan adalah data dari alamat
memori yang ditunjuk pointer namun jika tidak menggunakan tanda
bintang maka yang akan ditampilkan adalah alamat memori dari
pointer tersebut
A Operator Dereference
Pada pendeklarasian variable user tidak diharuskan menentukan lokasi
sesungguhnya pada memory Hal ini akan dilakukan secara otomatis oleh
compiler dan operating system pada saat run-time Jika ingin mengetahui di mana
suatu variable disimpan dapat dilakukan dengan memberikan tanda ampersand
(amp) di depan variable yang berarti ldquoaddress ofrdquo
Contoh
Buku = ampbahasa
Akan memberikan variabel buku alamat dari bahasa karena variable bahasa diberi
awalan ampersand (amp) maka menjadi pokok disini adalah alamat dalam
memory bukan isi variable Misalkan bahasa diletakkan di alamat 1776
kemudian dituliskan instruksi sbb
Bahasa = 25 nilai Bahasa 25
Sejarah = bahasa
buku = ampbahasa nilai buku adalah alamat dari bahasa
Maka hasilnya Bahasa
25
1775 1776 1777
Sejarah Buku
B Operator Reference
Dengan menggunakan pointer kita dapat mengakses nilai yang tersimpan secara
langsung dengan memberikan awalan operator asterisk() pada identifier pointer
yang berarti ldquovalue pointed byrdquo
Contoh
BhsC = buku
(dapat dikatakan bahwa BhsC sama dengan nilai yang ditunjuk oleh buku) BhsC
= 25 karena buku di alamat 1776 dan nilai yang berada pada alamat 1776 adalah
25
OPERATOR PENUGASAN
Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain
bull Contoh
25 1776
y = 65
x1 = ampy
X2 = x1
POINTER KE POINTER
Adalah pointer yang menunjuk ke pointer lain yang berisi alamat yang
ditempati oleh pointer yang sedang menunjuk ke variable lain tersebut atau sering
disebut multiple indirection Cara mendeklarasikan adalah dengan menambah
tanda asterisk () sebanyak dua kali di depan nama pointer yang akan
dideklarasikan
Bentuk umum
Misal pointer P menunjuk ke alamat dari variable a bertipe integer
sedangkan B dideklarasikan menunjuk alamat dari pointer P
a = 5 P=ampa B=ampP maka B nilainya sama dengan nilai pada alamat
yang ditunjuk oleh pointer P (ampa) Dapat disimpulkan bahwa nilai dari
variable a (yaitu 5) dapat diakses melalui pointer P dengan cara
menuliskan P dan menggunakan pointer B dengan cara menuliskan B
POINTER PADA ARRAY
Dalam pemrograman C definisi array dituliskan
type_name array_name[number_of_array]
misal array A bertipe integer dengan 10 anggota didefinisikan dengan
int A[10]
Maksud dari penulisan diatas maka kita memerintahkan kompiler untuk
menyediakan alamat memori sebesar 10 sizeof(int) Bila ukuran int
adalah 4 byte maka compiler akan mengalokasikan sebesar 10 4 byte =
40 byte memori untuk A
misalnya alamat awal Array A (A[0]) adalah 0xFFFF0000 maka dapat digambarkan
A[0] 0xFFFF0000
A[1] 0xFFFF0004
A[2] 0xFFFF0008
hellip hellip
A[7] 0xFFFF001C
A[8] 0xFFFF0020
A[9] 0xFFFF0024
pointer pada array sesungguhnya kita juga memerintahkan pointer agar menunjuk ke alamat yang telah dialokasikan oleh array tersebut Pada contoh diatas bila kita mendefinisikan suatu pointer
int P
kemudian kita tunjuk ke alamat Array A
P = ampA[0]
maka alamat P akan menunjuk ke alamat 0xFFFF0000
Pada suatu tipe data array variabel pointer hanya perlu menunjuk pada
nama variabel arraynya saja tanpa perlu menggunakan tanda ampersand
atau menunjuk pada nama variabel array pada indeks yang ke nol nya
Nama array tanpa index adalah pointer ke elemen pertama dari array
Untuk lebih jelasnya coba program berikut ini
Hasil dari
for(index=0indexlt10 index ++) printf(3d nilai[index]) cetak Array
dengan
ip=ampnilai[0] variable pointer yg menunjuk alamat dari array nilai ke 0
for(index=0 indexlt10 index++) printf(3d ip++) cetak pointer
adalah sama
Hal ini berarti dapat kita simpulkan bahwa
1 Kita dapat membaca isi dari suatu array melalui suatu pointer asalkan pointer
tersebut menunjuk ke alamat dari array yang ingin kita baca
2 Increment dari pointer yang menunjuk ke array adalah sam dengan increment
index (posisi) dari array yang ditunjuk
Array dari Pointer (Array of Pointer)
Suatu array bisa digunakan untuk menyimpan sejumlah pointer Sebagai
contoh
char namahari[10]
merupakan pernyataan untuk mendeklarasikan array pointer Array namahari
terdiri dari 10 elemen berupa pointer yang menunjuk ke data bertipe char
Array pointer bisa diinisialisasi sewaktu pendeklarasian Sebagai contoh
static char namahari[] =
ldquoSeninrdquo
ldquoSelasardquo
ldquoRaburdquo
ldquoKamisrdquo
ldquoJumatrdquo
ldquoSabturdquo
ldquoMinggurdquo
Pada contoh ini
namahari[0] berisi alamat yang menunjuk ke string ldquoSeninrdquo
namahari[1] berisi alamat yang menunjuk ke string ldquoSelasardquo
namahari[2] berisi alamat yang menunjuk ke string ldquoRaburdquo dan sebagainya
II POINTER PADA STRING
Fungsi string yang mempunyai parameter berupa string hanya mengirimkan
alamatnya bukan stringnya sendiri
Contoh
include ltstdiohgtmain() char s[80]char pint iclrscr()printf(Masukkan dua buah kalimat ) gets(s)for (i=0 s[i] ampamp s[i] = i++)p=amps[i+1]printf(Kalimat keduanya adalah n)printf(p)getch()
Hasil
Keterangan
1048707 Pada pengulangan for akan berhenti jika pada string tersebut ditemukan
karakter titik atau null
1048707 Pernyataan p=amps[i+1] akan menunjuk ke karakter sesudah titik atau null
Misalnya karakter kelima adalah titik maka p akan menunjuk ke karakter ke
enam Pernyataan tersebut dapat diganti dengan p=amps[i]+1
III POINTER ARITMATIKA
Elemen-elemen array biasanya diakses melalui indeksnya sebenarnya ada
cara lain yang lebih efisien yaitu dengan menggunakan pointer Pointer semacam
ini disebut dengan istilah pointer aritmetika Konsep dasar dari pointer aritmetika
ini adalah melakukan operasi aritmetika terhadap variabel yang bertipe pointer
Misalnya kita mempunyai 5 buah data bertipe int yang disimpan dalam bentuk
array dengan nama A dan digambarkan sebagai berikut
24 32 81 44 23
PP+3
Jika kita mempunyai pointer p maka kita dapat mengakses elemen-elemen array
di atas dengan cara melakukan operasi terhadap p
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan
nilai integer saja Operasi yang biasa dilakukan adalah operasi penambahan dan
pengurangan Operasi penambahan dengan suatu nilai menunjukkan lokasi data
berikutnya (index selanjutnya) dalam memori Begitu juga operasi pengurangan
Contoh
Hasil
Isi p1 sebelum ditambah adalah 65494
Isi p1 sesudah ditambah adalah 65496
Isi p2 sebelum dikurangi adalah 65494
Isi p2 sesudah dikurangi adalah 65492
Isi p2 sesudah ditambah dengan 5 adalah 65502
Keterangan
main() int a p1 p2clrscr()a=5 p1=ampaprintf(n Isi p1 sebelum ditambah adalah 5u p1)p1++printf(n Isi p1 sesudah ditambah adalah 5u p1)p2=ampaprintf(n Isi p2 sebelum dikurangi adalah 5u p2)p2--printf(n Isi p2 sesudah dikurangi adalah 5u p2)p2 = p2 + 5printf(n Isi p2 sesudah ditambah dengan 5 adalah 5u p2)getch()
1048707 Variabel a bertipe int variabel p1 dan p2 adalah pointer yang menunjuk ke
variabel int
1048707 Pernyataan p1++ menyebabkan p1 bertambah dengan 2 sebab variabel integer
berukuran 2 byte juga dengan p2-- akan berkurang 2
1048707 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
IV ARITMATIKA PADA POINTER DAN ARRAY
Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0] maka P+1 =
ampA[1] P+2 = ampA[2] dan seterusnya Dari gambaran diatas melakukan
operasi aritmatika terhadap pointer P yang berhubungan dengan array A
(dalam hal ini operasi penjumlahan) proses seperti ini dinamakan
ldquoAritmatika Pointer dan arrayrdquo
Contoh
Maka statement P2 ndash P1 menghasilkan nilai 3 karena selisih letak alamat
memori antara yang ditunjuk oleh pointer P2 dan P1 Untuk
membuktikannya kita implementasikan pada sebuah program sebagai
berikut
Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

Akan memberikan variabel buku alamat dari bahasa karena variable bahasa diberi
awalan ampersand (amp) maka menjadi pokok disini adalah alamat dalam
memory bukan isi variable Misalkan bahasa diletakkan di alamat 1776
kemudian dituliskan instruksi sbb
Bahasa = 25 nilai Bahasa 25
Sejarah = bahasa
buku = ampbahasa nilai buku adalah alamat dari bahasa
Maka hasilnya Bahasa
25
1775 1776 1777
Sejarah Buku
B Operator Reference
Dengan menggunakan pointer kita dapat mengakses nilai yang tersimpan secara
langsung dengan memberikan awalan operator asterisk() pada identifier pointer
yang berarti ldquovalue pointed byrdquo
Contoh
BhsC = buku
(dapat dikatakan bahwa BhsC sama dengan nilai yang ditunjuk oleh buku) BhsC
= 25 karena buku di alamat 1776 dan nilai yang berada pada alamat 1776 adalah
25
OPERATOR PENUGASAN
Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain
bull Contoh
25 1776
y = 65
x1 = ampy
X2 = x1
POINTER KE POINTER
Adalah pointer yang menunjuk ke pointer lain yang berisi alamat yang
ditempati oleh pointer yang sedang menunjuk ke variable lain tersebut atau sering
disebut multiple indirection Cara mendeklarasikan adalah dengan menambah
tanda asterisk () sebanyak dua kali di depan nama pointer yang akan
dideklarasikan
Bentuk umum
Misal pointer P menunjuk ke alamat dari variable a bertipe integer
sedangkan B dideklarasikan menunjuk alamat dari pointer P
a = 5 P=ampa B=ampP maka B nilainya sama dengan nilai pada alamat
yang ditunjuk oleh pointer P (ampa) Dapat disimpulkan bahwa nilai dari
variable a (yaitu 5) dapat diakses melalui pointer P dengan cara
menuliskan P dan menggunakan pointer B dengan cara menuliskan B
POINTER PADA ARRAY
Dalam pemrograman C definisi array dituliskan
type_name array_name[number_of_array]
misal array A bertipe integer dengan 10 anggota didefinisikan dengan
int A[10]
Maksud dari penulisan diatas maka kita memerintahkan kompiler untuk
menyediakan alamat memori sebesar 10 sizeof(int) Bila ukuran int
adalah 4 byte maka compiler akan mengalokasikan sebesar 10 4 byte =
40 byte memori untuk A
misalnya alamat awal Array A (A[0]) adalah 0xFFFF0000 maka dapat digambarkan
A[0] 0xFFFF0000
A[1] 0xFFFF0004
A[2] 0xFFFF0008
hellip hellip
A[7] 0xFFFF001C
A[8] 0xFFFF0020
A[9] 0xFFFF0024
pointer pada array sesungguhnya kita juga memerintahkan pointer agar menunjuk ke alamat yang telah dialokasikan oleh array tersebut Pada contoh diatas bila kita mendefinisikan suatu pointer
int P
kemudian kita tunjuk ke alamat Array A
P = ampA[0]
maka alamat P akan menunjuk ke alamat 0xFFFF0000
Pada suatu tipe data array variabel pointer hanya perlu menunjuk pada
nama variabel arraynya saja tanpa perlu menggunakan tanda ampersand
atau menunjuk pada nama variabel array pada indeks yang ke nol nya
Nama array tanpa index adalah pointer ke elemen pertama dari array
Untuk lebih jelasnya coba program berikut ini
Hasil dari
for(index=0indexlt10 index ++) printf(3d nilai[index]) cetak Array
dengan
ip=ampnilai[0] variable pointer yg menunjuk alamat dari array nilai ke 0
for(index=0 indexlt10 index++) printf(3d ip++) cetak pointer
adalah sama
Hal ini berarti dapat kita simpulkan bahwa
1 Kita dapat membaca isi dari suatu array melalui suatu pointer asalkan pointer
tersebut menunjuk ke alamat dari array yang ingin kita baca
2 Increment dari pointer yang menunjuk ke array adalah sam dengan increment
index (posisi) dari array yang ditunjuk
Array dari Pointer (Array of Pointer)
Suatu array bisa digunakan untuk menyimpan sejumlah pointer Sebagai
contoh
char namahari[10]
merupakan pernyataan untuk mendeklarasikan array pointer Array namahari
terdiri dari 10 elemen berupa pointer yang menunjuk ke data bertipe char
Array pointer bisa diinisialisasi sewaktu pendeklarasian Sebagai contoh
static char namahari[] =
ldquoSeninrdquo
ldquoSelasardquo
ldquoRaburdquo
ldquoKamisrdquo
ldquoJumatrdquo
ldquoSabturdquo
ldquoMinggurdquo
Pada contoh ini
namahari[0] berisi alamat yang menunjuk ke string ldquoSeninrdquo
namahari[1] berisi alamat yang menunjuk ke string ldquoSelasardquo
namahari[2] berisi alamat yang menunjuk ke string ldquoRaburdquo dan sebagainya
II POINTER PADA STRING
Fungsi string yang mempunyai parameter berupa string hanya mengirimkan
alamatnya bukan stringnya sendiri
Contoh
include ltstdiohgtmain() char s[80]char pint iclrscr()printf(Masukkan dua buah kalimat ) gets(s)for (i=0 s[i] ampamp s[i] = i++)p=amps[i+1]printf(Kalimat keduanya adalah n)printf(p)getch()
Hasil
Keterangan
1048707 Pada pengulangan for akan berhenti jika pada string tersebut ditemukan
karakter titik atau null
1048707 Pernyataan p=amps[i+1] akan menunjuk ke karakter sesudah titik atau null
Misalnya karakter kelima adalah titik maka p akan menunjuk ke karakter ke
enam Pernyataan tersebut dapat diganti dengan p=amps[i]+1
III POINTER ARITMATIKA
Elemen-elemen array biasanya diakses melalui indeksnya sebenarnya ada
cara lain yang lebih efisien yaitu dengan menggunakan pointer Pointer semacam
ini disebut dengan istilah pointer aritmetika Konsep dasar dari pointer aritmetika
ini adalah melakukan operasi aritmetika terhadap variabel yang bertipe pointer
Misalnya kita mempunyai 5 buah data bertipe int yang disimpan dalam bentuk
array dengan nama A dan digambarkan sebagai berikut
24 32 81 44 23
PP+3
Jika kita mempunyai pointer p maka kita dapat mengakses elemen-elemen array
di atas dengan cara melakukan operasi terhadap p
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan
nilai integer saja Operasi yang biasa dilakukan adalah operasi penambahan dan
pengurangan Operasi penambahan dengan suatu nilai menunjukkan lokasi data
berikutnya (index selanjutnya) dalam memori Begitu juga operasi pengurangan
Contoh
Hasil
Isi p1 sebelum ditambah adalah 65494
Isi p1 sesudah ditambah adalah 65496
Isi p2 sebelum dikurangi adalah 65494
Isi p2 sesudah dikurangi adalah 65492
Isi p2 sesudah ditambah dengan 5 adalah 65502
Keterangan
main() int a p1 p2clrscr()a=5 p1=ampaprintf(n Isi p1 sebelum ditambah adalah 5u p1)p1++printf(n Isi p1 sesudah ditambah adalah 5u p1)p2=ampaprintf(n Isi p2 sebelum dikurangi adalah 5u p2)p2--printf(n Isi p2 sesudah dikurangi adalah 5u p2)p2 = p2 + 5printf(n Isi p2 sesudah ditambah dengan 5 adalah 5u p2)getch()
1048707 Variabel a bertipe int variabel p1 dan p2 adalah pointer yang menunjuk ke
variabel int
1048707 Pernyataan p1++ menyebabkan p1 bertambah dengan 2 sebab variabel integer
berukuran 2 byte juga dengan p2-- akan berkurang 2
1048707 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
IV ARITMATIKA PADA POINTER DAN ARRAY
Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0] maka P+1 =
ampA[1] P+2 = ampA[2] dan seterusnya Dari gambaran diatas melakukan
operasi aritmatika terhadap pointer P yang berhubungan dengan array A
(dalam hal ini operasi penjumlahan) proses seperti ini dinamakan
ldquoAritmatika Pointer dan arrayrdquo
Contoh
Maka statement P2 ndash P1 menghasilkan nilai 3 karena selisih letak alamat
memori antara yang ditunjuk oleh pointer P2 dan P1 Untuk
membuktikannya kita implementasikan pada sebuah program sebagai
berikut
Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

y = 65
x1 = ampy
X2 = x1
POINTER KE POINTER
Adalah pointer yang menunjuk ke pointer lain yang berisi alamat yang
ditempati oleh pointer yang sedang menunjuk ke variable lain tersebut atau sering
disebut multiple indirection Cara mendeklarasikan adalah dengan menambah
tanda asterisk () sebanyak dua kali di depan nama pointer yang akan
dideklarasikan
Bentuk umum
Misal pointer P menunjuk ke alamat dari variable a bertipe integer
sedangkan B dideklarasikan menunjuk alamat dari pointer P
a = 5 P=ampa B=ampP maka B nilainya sama dengan nilai pada alamat
yang ditunjuk oleh pointer P (ampa) Dapat disimpulkan bahwa nilai dari
variable a (yaitu 5) dapat diakses melalui pointer P dengan cara
menuliskan P dan menggunakan pointer B dengan cara menuliskan B
POINTER PADA ARRAY
Dalam pemrograman C definisi array dituliskan
type_name array_name[number_of_array]
misal array A bertipe integer dengan 10 anggota didefinisikan dengan
int A[10]
Maksud dari penulisan diatas maka kita memerintahkan kompiler untuk
menyediakan alamat memori sebesar 10 sizeof(int) Bila ukuran int
adalah 4 byte maka compiler akan mengalokasikan sebesar 10 4 byte =
40 byte memori untuk A
misalnya alamat awal Array A (A[0]) adalah 0xFFFF0000 maka dapat digambarkan
A[0] 0xFFFF0000
A[1] 0xFFFF0004
A[2] 0xFFFF0008
hellip hellip
A[7] 0xFFFF001C
A[8] 0xFFFF0020
A[9] 0xFFFF0024
pointer pada array sesungguhnya kita juga memerintahkan pointer agar menunjuk ke alamat yang telah dialokasikan oleh array tersebut Pada contoh diatas bila kita mendefinisikan suatu pointer
int P
kemudian kita tunjuk ke alamat Array A
P = ampA[0]
maka alamat P akan menunjuk ke alamat 0xFFFF0000
Pada suatu tipe data array variabel pointer hanya perlu menunjuk pada
nama variabel arraynya saja tanpa perlu menggunakan tanda ampersand
atau menunjuk pada nama variabel array pada indeks yang ke nol nya
Nama array tanpa index adalah pointer ke elemen pertama dari array
Untuk lebih jelasnya coba program berikut ini
Hasil dari
for(index=0indexlt10 index ++) printf(3d nilai[index]) cetak Array
dengan
ip=ampnilai[0] variable pointer yg menunjuk alamat dari array nilai ke 0
for(index=0 indexlt10 index++) printf(3d ip++) cetak pointer
adalah sama
Hal ini berarti dapat kita simpulkan bahwa
1 Kita dapat membaca isi dari suatu array melalui suatu pointer asalkan pointer
tersebut menunjuk ke alamat dari array yang ingin kita baca
2 Increment dari pointer yang menunjuk ke array adalah sam dengan increment
index (posisi) dari array yang ditunjuk
Array dari Pointer (Array of Pointer)
Suatu array bisa digunakan untuk menyimpan sejumlah pointer Sebagai
contoh
char namahari[10]
merupakan pernyataan untuk mendeklarasikan array pointer Array namahari
terdiri dari 10 elemen berupa pointer yang menunjuk ke data bertipe char
Array pointer bisa diinisialisasi sewaktu pendeklarasian Sebagai contoh
static char namahari[] =
ldquoSeninrdquo
ldquoSelasardquo
ldquoRaburdquo
ldquoKamisrdquo
ldquoJumatrdquo
ldquoSabturdquo
ldquoMinggurdquo
Pada contoh ini
namahari[0] berisi alamat yang menunjuk ke string ldquoSeninrdquo
namahari[1] berisi alamat yang menunjuk ke string ldquoSelasardquo
namahari[2] berisi alamat yang menunjuk ke string ldquoRaburdquo dan sebagainya
II POINTER PADA STRING
Fungsi string yang mempunyai parameter berupa string hanya mengirimkan
alamatnya bukan stringnya sendiri
Contoh
include ltstdiohgtmain() char s[80]char pint iclrscr()printf(Masukkan dua buah kalimat ) gets(s)for (i=0 s[i] ampamp s[i] = i++)p=amps[i+1]printf(Kalimat keduanya adalah n)printf(p)getch()
Hasil
Keterangan
1048707 Pada pengulangan for akan berhenti jika pada string tersebut ditemukan
karakter titik atau null
1048707 Pernyataan p=amps[i+1] akan menunjuk ke karakter sesudah titik atau null
Misalnya karakter kelima adalah titik maka p akan menunjuk ke karakter ke
enam Pernyataan tersebut dapat diganti dengan p=amps[i]+1
III POINTER ARITMATIKA
Elemen-elemen array biasanya diakses melalui indeksnya sebenarnya ada
cara lain yang lebih efisien yaitu dengan menggunakan pointer Pointer semacam
ini disebut dengan istilah pointer aritmetika Konsep dasar dari pointer aritmetika
ini adalah melakukan operasi aritmetika terhadap variabel yang bertipe pointer
Misalnya kita mempunyai 5 buah data bertipe int yang disimpan dalam bentuk
array dengan nama A dan digambarkan sebagai berikut
24 32 81 44 23
PP+3
Jika kita mempunyai pointer p maka kita dapat mengakses elemen-elemen array
di atas dengan cara melakukan operasi terhadap p
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan
nilai integer saja Operasi yang biasa dilakukan adalah operasi penambahan dan
pengurangan Operasi penambahan dengan suatu nilai menunjukkan lokasi data
berikutnya (index selanjutnya) dalam memori Begitu juga operasi pengurangan
Contoh
Hasil
Isi p1 sebelum ditambah adalah 65494
Isi p1 sesudah ditambah adalah 65496
Isi p2 sebelum dikurangi adalah 65494
Isi p2 sesudah dikurangi adalah 65492
Isi p2 sesudah ditambah dengan 5 adalah 65502
Keterangan
main() int a p1 p2clrscr()a=5 p1=ampaprintf(n Isi p1 sebelum ditambah adalah 5u p1)p1++printf(n Isi p1 sesudah ditambah adalah 5u p1)p2=ampaprintf(n Isi p2 sebelum dikurangi adalah 5u p2)p2--printf(n Isi p2 sesudah dikurangi adalah 5u p2)p2 = p2 + 5printf(n Isi p2 sesudah ditambah dengan 5 adalah 5u p2)getch()
1048707 Variabel a bertipe int variabel p1 dan p2 adalah pointer yang menunjuk ke
variabel int
1048707 Pernyataan p1++ menyebabkan p1 bertambah dengan 2 sebab variabel integer
berukuran 2 byte juga dengan p2-- akan berkurang 2
1048707 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
IV ARITMATIKA PADA POINTER DAN ARRAY
Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0] maka P+1 =
ampA[1] P+2 = ampA[2] dan seterusnya Dari gambaran diatas melakukan
operasi aritmatika terhadap pointer P yang berhubungan dengan array A
(dalam hal ini operasi penjumlahan) proses seperti ini dinamakan
ldquoAritmatika Pointer dan arrayrdquo
Contoh
Maka statement P2 ndash P1 menghasilkan nilai 3 karena selisih letak alamat
memori antara yang ditunjuk oleh pointer P2 dan P1 Untuk
membuktikannya kita implementasikan pada sebuah program sebagai
berikut
Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

misalnya alamat awal Array A (A[0]) adalah 0xFFFF0000 maka dapat digambarkan
A[0] 0xFFFF0000
A[1] 0xFFFF0004
A[2] 0xFFFF0008
hellip hellip
A[7] 0xFFFF001C
A[8] 0xFFFF0020
A[9] 0xFFFF0024
pointer pada array sesungguhnya kita juga memerintahkan pointer agar menunjuk ke alamat yang telah dialokasikan oleh array tersebut Pada contoh diatas bila kita mendefinisikan suatu pointer
int P
kemudian kita tunjuk ke alamat Array A
P = ampA[0]
maka alamat P akan menunjuk ke alamat 0xFFFF0000
Pada suatu tipe data array variabel pointer hanya perlu menunjuk pada
nama variabel arraynya saja tanpa perlu menggunakan tanda ampersand
atau menunjuk pada nama variabel array pada indeks yang ke nol nya
Nama array tanpa index adalah pointer ke elemen pertama dari array
Untuk lebih jelasnya coba program berikut ini
Hasil dari
for(index=0indexlt10 index ++) printf(3d nilai[index]) cetak Array
dengan
ip=ampnilai[0] variable pointer yg menunjuk alamat dari array nilai ke 0
for(index=0 indexlt10 index++) printf(3d ip++) cetak pointer
adalah sama
Hal ini berarti dapat kita simpulkan bahwa
1 Kita dapat membaca isi dari suatu array melalui suatu pointer asalkan pointer
tersebut menunjuk ke alamat dari array yang ingin kita baca
2 Increment dari pointer yang menunjuk ke array adalah sam dengan increment
index (posisi) dari array yang ditunjuk
Array dari Pointer (Array of Pointer)
Suatu array bisa digunakan untuk menyimpan sejumlah pointer Sebagai
contoh
char namahari[10]
merupakan pernyataan untuk mendeklarasikan array pointer Array namahari
terdiri dari 10 elemen berupa pointer yang menunjuk ke data bertipe char
Array pointer bisa diinisialisasi sewaktu pendeklarasian Sebagai contoh
static char namahari[] =
ldquoSeninrdquo
ldquoSelasardquo
ldquoRaburdquo
ldquoKamisrdquo
ldquoJumatrdquo
ldquoSabturdquo
ldquoMinggurdquo
Pada contoh ini
namahari[0] berisi alamat yang menunjuk ke string ldquoSeninrdquo
namahari[1] berisi alamat yang menunjuk ke string ldquoSelasardquo
namahari[2] berisi alamat yang menunjuk ke string ldquoRaburdquo dan sebagainya
II POINTER PADA STRING
Fungsi string yang mempunyai parameter berupa string hanya mengirimkan
alamatnya bukan stringnya sendiri
Contoh
include ltstdiohgtmain() char s[80]char pint iclrscr()printf(Masukkan dua buah kalimat ) gets(s)for (i=0 s[i] ampamp s[i] = i++)p=amps[i+1]printf(Kalimat keduanya adalah n)printf(p)getch()
Hasil
Keterangan
1048707 Pada pengulangan for akan berhenti jika pada string tersebut ditemukan
karakter titik atau null
1048707 Pernyataan p=amps[i+1] akan menunjuk ke karakter sesudah titik atau null
Misalnya karakter kelima adalah titik maka p akan menunjuk ke karakter ke
enam Pernyataan tersebut dapat diganti dengan p=amps[i]+1
III POINTER ARITMATIKA
Elemen-elemen array biasanya diakses melalui indeksnya sebenarnya ada
cara lain yang lebih efisien yaitu dengan menggunakan pointer Pointer semacam
ini disebut dengan istilah pointer aritmetika Konsep dasar dari pointer aritmetika
ini adalah melakukan operasi aritmetika terhadap variabel yang bertipe pointer
Misalnya kita mempunyai 5 buah data bertipe int yang disimpan dalam bentuk
array dengan nama A dan digambarkan sebagai berikut
24 32 81 44 23
PP+3
Jika kita mempunyai pointer p maka kita dapat mengakses elemen-elemen array
di atas dengan cara melakukan operasi terhadap p
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan
nilai integer saja Operasi yang biasa dilakukan adalah operasi penambahan dan
pengurangan Operasi penambahan dengan suatu nilai menunjukkan lokasi data
berikutnya (index selanjutnya) dalam memori Begitu juga operasi pengurangan
Contoh
Hasil
Isi p1 sebelum ditambah adalah 65494
Isi p1 sesudah ditambah adalah 65496
Isi p2 sebelum dikurangi adalah 65494
Isi p2 sesudah dikurangi adalah 65492
Isi p2 sesudah ditambah dengan 5 adalah 65502
Keterangan
main() int a p1 p2clrscr()a=5 p1=ampaprintf(n Isi p1 sebelum ditambah adalah 5u p1)p1++printf(n Isi p1 sesudah ditambah adalah 5u p1)p2=ampaprintf(n Isi p2 sebelum dikurangi adalah 5u p2)p2--printf(n Isi p2 sesudah dikurangi adalah 5u p2)p2 = p2 + 5printf(n Isi p2 sesudah ditambah dengan 5 adalah 5u p2)getch()
1048707 Variabel a bertipe int variabel p1 dan p2 adalah pointer yang menunjuk ke
variabel int
1048707 Pernyataan p1++ menyebabkan p1 bertambah dengan 2 sebab variabel integer
berukuran 2 byte juga dengan p2-- akan berkurang 2
1048707 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
IV ARITMATIKA PADA POINTER DAN ARRAY
Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0] maka P+1 =
ampA[1] P+2 = ampA[2] dan seterusnya Dari gambaran diatas melakukan
operasi aritmatika terhadap pointer P yang berhubungan dengan array A
(dalam hal ini operasi penjumlahan) proses seperti ini dinamakan
ldquoAritmatika Pointer dan arrayrdquo
Contoh
Maka statement P2 ndash P1 menghasilkan nilai 3 karena selisih letak alamat
memori antara yang ditunjuk oleh pointer P2 dan P1 Untuk
membuktikannya kita implementasikan pada sebuah program sebagai
berikut
Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

Hasil dari
for(index=0indexlt10 index ++) printf(3d nilai[index]) cetak Array
dengan
ip=ampnilai[0] variable pointer yg menunjuk alamat dari array nilai ke 0
for(index=0 indexlt10 index++) printf(3d ip++) cetak pointer
adalah sama
Hal ini berarti dapat kita simpulkan bahwa
1 Kita dapat membaca isi dari suatu array melalui suatu pointer asalkan pointer
tersebut menunjuk ke alamat dari array yang ingin kita baca
2 Increment dari pointer yang menunjuk ke array adalah sam dengan increment
index (posisi) dari array yang ditunjuk
Array dari Pointer (Array of Pointer)
Suatu array bisa digunakan untuk menyimpan sejumlah pointer Sebagai
contoh
char namahari[10]
merupakan pernyataan untuk mendeklarasikan array pointer Array namahari
terdiri dari 10 elemen berupa pointer yang menunjuk ke data bertipe char
Array pointer bisa diinisialisasi sewaktu pendeklarasian Sebagai contoh
static char namahari[] =
ldquoSeninrdquo
ldquoSelasardquo
ldquoRaburdquo
ldquoKamisrdquo
ldquoJumatrdquo
ldquoSabturdquo
ldquoMinggurdquo
Pada contoh ini
namahari[0] berisi alamat yang menunjuk ke string ldquoSeninrdquo
namahari[1] berisi alamat yang menunjuk ke string ldquoSelasardquo
namahari[2] berisi alamat yang menunjuk ke string ldquoRaburdquo dan sebagainya
II POINTER PADA STRING
Fungsi string yang mempunyai parameter berupa string hanya mengirimkan
alamatnya bukan stringnya sendiri
Contoh
include ltstdiohgtmain() char s[80]char pint iclrscr()printf(Masukkan dua buah kalimat ) gets(s)for (i=0 s[i] ampamp s[i] = i++)p=amps[i+1]printf(Kalimat keduanya adalah n)printf(p)getch()
Hasil
Keterangan
1048707 Pada pengulangan for akan berhenti jika pada string tersebut ditemukan
karakter titik atau null
1048707 Pernyataan p=amps[i+1] akan menunjuk ke karakter sesudah titik atau null
Misalnya karakter kelima adalah titik maka p akan menunjuk ke karakter ke
enam Pernyataan tersebut dapat diganti dengan p=amps[i]+1
III POINTER ARITMATIKA
Elemen-elemen array biasanya diakses melalui indeksnya sebenarnya ada
cara lain yang lebih efisien yaitu dengan menggunakan pointer Pointer semacam
ini disebut dengan istilah pointer aritmetika Konsep dasar dari pointer aritmetika
ini adalah melakukan operasi aritmetika terhadap variabel yang bertipe pointer
Misalnya kita mempunyai 5 buah data bertipe int yang disimpan dalam bentuk
array dengan nama A dan digambarkan sebagai berikut
24 32 81 44 23
PP+3
Jika kita mempunyai pointer p maka kita dapat mengakses elemen-elemen array
di atas dengan cara melakukan operasi terhadap p
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan
nilai integer saja Operasi yang biasa dilakukan adalah operasi penambahan dan
pengurangan Operasi penambahan dengan suatu nilai menunjukkan lokasi data
berikutnya (index selanjutnya) dalam memori Begitu juga operasi pengurangan
Contoh
Hasil
Isi p1 sebelum ditambah adalah 65494
Isi p1 sesudah ditambah adalah 65496
Isi p2 sebelum dikurangi adalah 65494
Isi p2 sesudah dikurangi adalah 65492
Isi p2 sesudah ditambah dengan 5 adalah 65502
Keterangan
main() int a p1 p2clrscr()a=5 p1=ampaprintf(n Isi p1 sebelum ditambah adalah 5u p1)p1++printf(n Isi p1 sesudah ditambah adalah 5u p1)p2=ampaprintf(n Isi p2 sebelum dikurangi adalah 5u p2)p2--printf(n Isi p2 sesudah dikurangi adalah 5u p2)p2 = p2 + 5printf(n Isi p2 sesudah ditambah dengan 5 adalah 5u p2)getch()
1048707 Variabel a bertipe int variabel p1 dan p2 adalah pointer yang menunjuk ke
variabel int
1048707 Pernyataan p1++ menyebabkan p1 bertambah dengan 2 sebab variabel integer
berukuran 2 byte juga dengan p2-- akan berkurang 2
1048707 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
IV ARITMATIKA PADA POINTER DAN ARRAY
Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0] maka P+1 =
ampA[1] P+2 = ampA[2] dan seterusnya Dari gambaran diatas melakukan
operasi aritmatika terhadap pointer P yang berhubungan dengan array A
(dalam hal ini operasi penjumlahan) proses seperti ini dinamakan
ldquoAritmatika Pointer dan arrayrdquo
Contoh
Maka statement P2 ndash P1 menghasilkan nilai 3 karena selisih letak alamat
memori antara yang ditunjuk oleh pointer P2 dan P1 Untuk
membuktikannya kita implementasikan pada sebuah program sebagai
berikut
Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

Array dari Pointer (Array of Pointer)
Suatu array bisa digunakan untuk menyimpan sejumlah pointer Sebagai
contoh
char namahari[10]
merupakan pernyataan untuk mendeklarasikan array pointer Array namahari
terdiri dari 10 elemen berupa pointer yang menunjuk ke data bertipe char
Array pointer bisa diinisialisasi sewaktu pendeklarasian Sebagai contoh
static char namahari[] =
ldquoSeninrdquo
ldquoSelasardquo
ldquoRaburdquo
ldquoKamisrdquo
ldquoJumatrdquo
ldquoSabturdquo
ldquoMinggurdquo
Pada contoh ini
namahari[0] berisi alamat yang menunjuk ke string ldquoSeninrdquo
namahari[1] berisi alamat yang menunjuk ke string ldquoSelasardquo
namahari[2] berisi alamat yang menunjuk ke string ldquoRaburdquo dan sebagainya
II POINTER PADA STRING
Fungsi string yang mempunyai parameter berupa string hanya mengirimkan
alamatnya bukan stringnya sendiri
Contoh
include ltstdiohgtmain() char s[80]char pint iclrscr()printf(Masukkan dua buah kalimat ) gets(s)for (i=0 s[i] ampamp s[i] = i++)p=amps[i+1]printf(Kalimat keduanya adalah n)printf(p)getch()
Hasil
Keterangan
1048707 Pada pengulangan for akan berhenti jika pada string tersebut ditemukan
karakter titik atau null
1048707 Pernyataan p=amps[i+1] akan menunjuk ke karakter sesudah titik atau null
Misalnya karakter kelima adalah titik maka p akan menunjuk ke karakter ke
enam Pernyataan tersebut dapat diganti dengan p=amps[i]+1
III POINTER ARITMATIKA
Elemen-elemen array biasanya diakses melalui indeksnya sebenarnya ada
cara lain yang lebih efisien yaitu dengan menggunakan pointer Pointer semacam
ini disebut dengan istilah pointer aritmetika Konsep dasar dari pointer aritmetika
ini adalah melakukan operasi aritmetika terhadap variabel yang bertipe pointer
Misalnya kita mempunyai 5 buah data bertipe int yang disimpan dalam bentuk
array dengan nama A dan digambarkan sebagai berikut
24 32 81 44 23
PP+3
Jika kita mempunyai pointer p maka kita dapat mengakses elemen-elemen array
di atas dengan cara melakukan operasi terhadap p
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan
nilai integer saja Operasi yang biasa dilakukan adalah operasi penambahan dan
pengurangan Operasi penambahan dengan suatu nilai menunjukkan lokasi data
berikutnya (index selanjutnya) dalam memori Begitu juga operasi pengurangan
Contoh
Hasil
Isi p1 sebelum ditambah adalah 65494
Isi p1 sesudah ditambah adalah 65496
Isi p2 sebelum dikurangi adalah 65494
Isi p2 sesudah dikurangi adalah 65492
Isi p2 sesudah ditambah dengan 5 adalah 65502
Keterangan
main() int a p1 p2clrscr()a=5 p1=ampaprintf(n Isi p1 sebelum ditambah adalah 5u p1)p1++printf(n Isi p1 sesudah ditambah adalah 5u p1)p2=ampaprintf(n Isi p2 sebelum dikurangi adalah 5u p2)p2--printf(n Isi p2 sesudah dikurangi adalah 5u p2)p2 = p2 + 5printf(n Isi p2 sesudah ditambah dengan 5 adalah 5u p2)getch()
1048707 Variabel a bertipe int variabel p1 dan p2 adalah pointer yang menunjuk ke
variabel int
1048707 Pernyataan p1++ menyebabkan p1 bertambah dengan 2 sebab variabel integer
berukuran 2 byte juga dengan p2-- akan berkurang 2
1048707 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
IV ARITMATIKA PADA POINTER DAN ARRAY
Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0] maka P+1 =
ampA[1] P+2 = ampA[2] dan seterusnya Dari gambaran diatas melakukan
operasi aritmatika terhadap pointer P yang berhubungan dengan array A
(dalam hal ini operasi penjumlahan) proses seperti ini dinamakan
ldquoAritmatika Pointer dan arrayrdquo
Contoh
Maka statement P2 ndash P1 menghasilkan nilai 3 karena selisih letak alamat
memori antara yang ditunjuk oleh pointer P2 dan P1 Untuk
membuktikannya kita implementasikan pada sebuah program sebagai
berikut
Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

include ltstdiohgtmain() char s[80]char pint iclrscr()printf(Masukkan dua buah kalimat ) gets(s)for (i=0 s[i] ampamp s[i] = i++)p=amps[i+1]printf(Kalimat keduanya adalah n)printf(p)getch()
Hasil
Keterangan
1048707 Pada pengulangan for akan berhenti jika pada string tersebut ditemukan
karakter titik atau null
1048707 Pernyataan p=amps[i+1] akan menunjuk ke karakter sesudah titik atau null
Misalnya karakter kelima adalah titik maka p akan menunjuk ke karakter ke
enam Pernyataan tersebut dapat diganti dengan p=amps[i]+1
III POINTER ARITMATIKA
Elemen-elemen array biasanya diakses melalui indeksnya sebenarnya ada
cara lain yang lebih efisien yaitu dengan menggunakan pointer Pointer semacam
ini disebut dengan istilah pointer aritmetika Konsep dasar dari pointer aritmetika
ini adalah melakukan operasi aritmetika terhadap variabel yang bertipe pointer
Misalnya kita mempunyai 5 buah data bertipe int yang disimpan dalam bentuk
array dengan nama A dan digambarkan sebagai berikut
24 32 81 44 23
PP+3
Jika kita mempunyai pointer p maka kita dapat mengakses elemen-elemen array
di atas dengan cara melakukan operasi terhadap p
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan
nilai integer saja Operasi yang biasa dilakukan adalah operasi penambahan dan
pengurangan Operasi penambahan dengan suatu nilai menunjukkan lokasi data
berikutnya (index selanjutnya) dalam memori Begitu juga operasi pengurangan
Contoh
Hasil
Isi p1 sebelum ditambah adalah 65494
Isi p1 sesudah ditambah adalah 65496
Isi p2 sebelum dikurangi adalah 65494
Isi p2 sesudah dikurangi adalah 65492
Isi p2 sesudah ditambah dengan 5 adalah 65502
Keterangan
main() int a p1 p2clrscr()a=5 p1=ampaprintf(n Isi p1 sebelum ditambah adalah 5u p1)p1++printf(n Isi p1 sesudah ditambah adalah 5u p1)p2=ampaprintf(n Isi p2 sebelum dikurangi adalah 5u p2)p2--printf(n Isi p2 sesudah dikurangi adalah 5u p2)p2 = p2 + 5printf(n Isi p2 sesudah ditambah dengan 5 adalah 5u p2)getch()
1048707 Variabel a bertipe int variabel p1 dan p2 adalah pointer yang menunjuk ke
variabel int
1048707 Pernyataan p1++ menyebabkan p1 bertambah dengan 2 sebab variabel integer
berukuran 2 byte juga dengan p2-- akan berkurang 2
1048707 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
IV ARITMATIKA PADA POINTER DAN ARRAY
Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0] maka P+1 =
ampA[1] P+2 = ampA[2] dan seterusnya Dari gambaran diatas melakukan
operasi aritmatika terhadap pointer P yang berhubungan dengan array A
(dalam hal ini operasi penjumlahan) proses seperti ini dinamakan
ldquoAritmatika Pointer dan arrayrdquo
Contoh
Maka statement P2 ndash P1 menghasilkan nilai 3 karena selisih letak alamat
memori antara yang ditunjuk oleh pointer P2 dan P1 Untuk
membuktikannya kita implementasikan pada sebuah program sebagai
berikut
Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

24 32 81 44 23
PP+3
Jika kita mempunyai pointer p maka kita dapat mengakses elemen-elemen array
di atas dengan cara melakukan operasi terhadap p
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan
nilai integer saja Operasi yang biasa dilakukan adalah operasi penambahan dan
pengurangan Operasi penambahan dengan suatu nilai menunjukkan lokasi data
berikutnya (index selanjutnya) dalam memori Begitu juga operasi pengurangan
Contoh
Hasil
Isi p1 sebelum ditambah adalah 65494
Isi p1 sesudah ditambah adalah 65496
Isi p2 sebelum dikurangi adalah 65494
Isi p2 sesudah dikurangi adalah 65492
Isi p2 sesudah ditambah dengan 5 adalah 65502
Keterangan
main() int a p1 p2clrscr()a=5 p1=ampaprintf(n Isi p1 sebelum ditambah adalah 5u p1)p1++printf(n Isi p1 sesudah ditambah adalah 5u p1)p2=ampaprintf(n Isi p2 sebelum dikurangi adalah 5u p2)p2--printf(n Isi p2 sesudah dikurangi adalah 5u p2)p2 = p2 + 5printf(n Isi p2 sesudah ditambah dengan 5 adalah 5u p2)getch()
1048707 Variabel a bertipe int variabel p1 dan p2 adalah pointer yang menunjuk ke
variabel int
1048707 Pernyataan p1++ menyebabkan p1 bertambah dengan 2 sebab variabel integer
berukuran 2 byte juga dengan p2-- akan berkurang 2
1048707 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
IV ARITMATIKA PADA POINTER DAN ARRAY
Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0] maka P+1 =
ampA[1] P+2 = ampA[2] dan seterusnya Dari gambaran diatas melakukan
operasi aritmatika terhadap pointer P yang berhubungan dengan array A
(dalam hal ini operasi penjumlahan) proses seperti ini dinamakan
ldquoAritmatika Pointer dan arrayrdquo
Contoh
Maka statement P2 ndash P1 menghasilkan nilai 3 karena selisih letak alamat
memori antara yang ditunjuk oleh pointer P2 dan P1 Untuk
membuktikannya kita implementasikan pada sebuah program sebagai
berikut
Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

1048707 Variabel a bertipe int variabel p1 dan p2 adalah pointer yang menunjuk ke
variabel int
1048707 Pernyataan p1++ menyebabkan p1 bertambah dengan 2 sebab variabel integer
berukuran 2 byte juga dengan p2-- akan berkurang 2
1048707 Pernyataan p2=p2+5 menunjuk ke 5 elemen berikutnya sesuai dengan tipe int
IV ARITMATIKA PADA POINTER DAN ARRAY
Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0] maka P+1 =
ampA[1] P+2 = ampA[2] dan seterusnya Dari gambaran diatas melakukan
operasi aritmatika terhadap pointer P yang berhubungan dengan array A
(dalam hal ini operasi penjumlahan) proses seperti ini dinamakan
ldquoAritmatika Pointer dan arrayrdquo
Contoh
Maka statement P2 ndash P1 menghasilkan nilai 3 karena selisih letak alamat
memori antara yang ditunjuk oleh pointer P2 dan P1 Untuk
membuktikannya kita implementasikan pada sebuah program sebagai
berikut
Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

Apabila dijalankan maka hasilnya adalah
V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

V PERMASALAHAN DENGAN OPERATOR ++ DAN - -
Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang
sama
pc + + = getchar ()
+ + pc = getchar ()
Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel
current ditunjuk oleh pc dan kemudian pc bertahap Increment Pernyataan kedua
alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh
fungsi ke sel yang ditunjuk oleh alamat yang diperbarui Kemudian dalam bab
akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument
for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja
yang digunakan dalam eksekusi program
VI PENGGUNAAN KONSTANTA PADA POINTER
Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat
menunjuk dari alamat tertentu saja Kata kunci const
Kata kunci const dapat ditempatkan sebelum tipe data sesudah maupun
keduanya (sebelum dan sesudah tipe data) Penempatan yang salah akan
menyebabkan perbedaan arti
a) Kata kunci const sebelum tipe data
Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang
bersifat konstan Artinya nilai tersebut tidak dapat dirubah
Bentuk umum
Contoh
Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

Program diatas tampak statement const int P yang meyatakan
bahwa kita melakukan deklarasi konstanta terhadap nilai yang
alamatnya akan ditunjuk oleh pointer P Dengan demikian apabila
pointer P menunjuk ke alamat dari variable x maka nilai dari
variable x atau P tidak dapat dirubah Sedangkan pointer P diatas
tidak bersifat konstan maka dapat menunjuk ke alamat dari variable
lain (dalam hal ini y)
b) Kata kunci const setelah tipe data
Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu
saja Berarti kita tidak dapat menunjuk ke alamat lainnya
Bentuk umum
Contoh
Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

Program diatas mendeklarasikan konstanta pointer yaitu dengan
nama P dimana pointer tersebut tidak dapat menunjuk ke alamat
dari variable lain (dalam hal ini y) Pointer P hanya menunjuk
alamat dari variable x saja namun dapat merubah nilai dari variable
x atau P
c) Kata kunci const sebelum dan sesudah tipe data (gabungan)
Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable
dan juga nilai dari pointernya Sehingga kita tidak dapat mengubah nilai
dari variable maupun alamat yang telah ditunjuk oleh pointer
Bentuk umum
Contoh
Pada program diatas pointer P hanya dapat menunjuk ke alamat dari
variable x saja dan tidak dapat merubah nilai pada variable dari alamat
yang ditunjuk oleh pointer P
VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

VII POINTER PERBANDINGAN
Pointer dapat dibandingkan dengan menggunakan operator hubungan seperti
= == lt dan gt
Contoh
VIII POINTER PORTABILITY
Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat Hal ini
menunjukkan kepada Anda bahwa C C ++ pointer adalah tipe int Ini bukan
pointer mempunyai alamat dari jenis tertentu dari variabel tetapi pointer itu
sendiri bukanlah salah satu dari tipe data primitif int float dan sejenisnya Sebuah
khususnya C C ++ sistem memungkinkan pointer yang akan diatasi menjadi
variabel int dan variabel int akan dikopi ke pointer namun C C ++ tidak
menjamin bahwa pointer dapat disimpan dalam variabel int Untuk menjamin
portabilitas kode praktek harus dihindari
Juga tidak semua operasi aritmatika pada pointer diperbolehkan Sebagai contoh
adalah ilegal untuk menambahkan dua pointer untuk mengalikan dua pointer
atau untuk membagi satu pointer oleh yang lain
IX PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-
BIT
Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat
kompilasi unary operator yang mengembalikan panjang dalam satuan byte dari
variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

variable atau disisipkan type-specifier yang mendahului Sebagai contohdengan
asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8
byte
double f
printf(d sizeof f)
printf(d sizeof(int))
CC++ mendefinisikan (menggunakan typedef) tipe khusus yang disebut
size_t yang sesuai longgar ke unsigned integer Secara teknis nilai yang
dikembalikan oleh sizeof adalah tipe size_t Untuk semua tujuan praktis
bagaimanapun anda bisa memikirkan itu (dan menggunakannya) seolah-olah itu
unsigned integer sebuah nilai sizeof terutama membantu untuk menghasilkan
kode portabel yang bergantung pada ukuran built-in data tipe Sebagai contoh
bayangkan sebuah program database yang perlu untuk menyimpan enam nilai
integer per record Jika Anda ingin port program database berbagai komputer
Anda tidak boleh menganggap ukuran integer tetapi harus menentukan yang
sebenarnya panjang menggunakan sizeof Dengan begitu Anda dapat
menggunakan rutin berikut ini untuk menulis merekam ke disk file
Write 6 integers to a disk file void put_rec(int rec[6] FILE fp)int lenlen = fwrite(rec sizeof(int)6 1 fp)if(len = 1) printf(Write Error)
Kode seperti ditunjukkan put_rec () mengkompilasi dan berjalan dengan
benar di lingkungan apapun termasuk orang yang menggunakan 16 - dan 32-bit
bilangan bulat Satu titik terakhir sizeof dievaluasi pada waktu kompilasi dan
nilai yang dihasilkan adalah diperlakukan sebagai suatu konstanta dalam program
Anda
X POINTER PADA FUNGSI
Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi
1048707 Pointer sebagai parameter fungsi
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu
variabel internal dapat diubah oleh fungsi yang dipanggil
Contoh
void rubah(int x int y)
main()
int a=3 int b=7
printf(Nilai semula a= d dan b= d ab)
rubah(ampa ampb)
printf(nNilai akhir a= d dan b= d ab)
void rubah(int x int y)
x = y + 2
y = y + 2
Hasil
Nilai semula a= 3 dan b= 7
Nilai akhir a= 9 dan b= 9
1048707 Pointer sebagai keluaran fungsi
Suatu fungsi dapat dibuat agar keluarannya berupa pointer Misalnya suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string
Contoh
char nama_bulan(int n)main() int blchar lagidoclrscr()printf(Bulan (112) )scanf(d ampbl)printf(sn nama_bulan(bl))printf(Input lagi [yt] )lagi=getch()while (lagi == y || lagi == Y)char nama_bulan(int n) static char bulan[] = Kode bulan salah Januari Februari MaretApril Mei Juni Juli AgustusSeptember Oktober November Desemberreturn ((nlt1 || ngt12) bulan[0] bulan[n])
Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

Hasil
Bulan (112) 4
April
Input lagi [yt]
XI MEMORI DINAMIS
Alokasi memori secara dinamis membutuhkan pointer untuk mencatat
alamat-alamat baru yang dipesan yakni dapat diubah-ubah alokasi
tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan
selalu tersimpan Fungsi-fungsi yang digunakan untuk memesan memori
yaitu fungsi malloc() calloc() dan realloc()
Fungsi malloc() mengembalikan pointer ke sejumlah n byte ruang
memori yang belum diinisialisasi jika tidak terpenuhi maka
mengembalikan nilai NULL Bentuk prototype
Tumpukan memori (terbuangnya ruang memory secara sia-sia) adalah
daerah memori bebas (kadang-kadang disebut sebagai ruang memori bebas)
yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free
()
Ketika malloc () dipanggil ia mengalokasikan berdekatan penyimpanan
untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok
Free function () mengembalikan memori yang sebelumnya dialokasikan ke
tumpukan memungkinkan bahwa sebagian dari memori yang akan dialokasikan
kembali Argumen dikirimkan ke malloc () merupakan integer yang mewakili
jumlah byte penyimpanan yang dibutuhkan Jika penyimpanan yang tersedia
malloc () akan mengembalikan void
include ltstdiohgtinclude ltstdlibhgtvoid main()int pp=(int ) malloc (sizeof(int))
p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi

p=10printf(ldquodnrdquop) free(p)
CONTOH PROGRAM
1 Melihat alamat dan nilai pada suatu variable
2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi