Transcript
Page 1: POINTER dan contoh program-PENS

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

Page 2: POINTER dan contoh program-PENS

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

Page 3: POINTER dan contoh program-PENS

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

Page 4: POINTER dan contoh program-PENS

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

Page 5: POINTER dan contoh program-PENS

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

Page 6: POINTER dan contoh program-PENS

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

Page 7: POINTER dan contoh program-PENS

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

Page 8: POINTER dan contoh program-PENS

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

Page 9: POINTER dan contoh program-PENS

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

Page 10: POINTER dan contoh program-PENS

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

Page 11: POINTER dan contoh program-PENS

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

Page 12: POINTER dan contoh program-PENS

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

Page 13: POINTER dan contoh program-PENS

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

Page 14: POINTER dan contoh program-PENS

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

Page 15: POINTER dan contoh program-PENS

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

Page 16: POINTER dan contoh program-PENS

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

Page 17: POINTER dan contoh program-PENS

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

Page 18: POINTER dan contoh program-PENS

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

Page 19: POINTER dan contoh program-PENS

p=10printf(ldquodnrdquop) free(p)

CONTOH PROGRAM

1 Melihat alamat dan nilai pada suatu variable

2 Menaikkan nilai awal suatu variable dengan melewatkan fungsi


Top Related