• Tidak ada hasil yang ditemukan

Konsep Pointer Dalam C

N/A
N/A
Protected

Academic year: 2018

Membagikan "Konsep Pointer Dalam C"

Copied!
16
0
0

Teks penuh

(1)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 1

Pertemuan 3

Konsep Pointer Dalam C

Disusun oleh :

PH. Prima Rosa, S.Si., M.Sc.

Sri Hartati Wijono, S.Si.

© 2003/2004

Konsep

Fungsi Mengembalikan Nilai

Argumen Fungsi

Arrays Sebagai Argumen

Scope

Pemanggilan Fungsi

Ekspresi Boolean

Statemen

if

Statemen

if-else

Statements

nested

if

Ekspresi Kondisi

Statemen

switch

PemakaianEkspresi Boolean

"Dangling Else"

Fungsi Pustaka String

Pointers

Operator Alamat

Mendeklarasikan Pointers

Pointers Lanjut

Pointers dan Arguments

Pointers dan Arrays

Aritmetic Pointer

(2)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 3

Apa Itu Pointers ?

• Semua data disimpan dalam memori pada

alamat tertentu.

• Sebuah pointer dapat digunakan untuk

menyimpan sebuah alamat dari sebuah

data

• Nilai yang disimpan dalam sebuah

variabel dapat diubah dengan mengubah

data di dalam tempat yang ditunjuk oleh

pointer pada memori.

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 4

Apa Itu Pointers ?

• Analogi : Jalan Raya

5

123

0

Pengenal

Ruang memori tempat penyimpan nilai

Alamat

Rumah Sakit

Toko

Rumah

3221219956

3221219952

3221219948

Penun

juk To

ko

(32212

19952

(3)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 5

• Bagaimana kita menemukan alamat

sebuah variabel dalam memori ?

– Menggunakan alamat operator

&

– Jangan dicampuradukkan dengan

operator boolean

&&

&DataInt

– Operator & diletakkan sebelum nama

variabel yang akan dicari alamatnya

Apa Itu Pointers ?

Apa Itu Pointers ?

• Contoh :

% a.out

DataInt disimpan di alamat :

3221219956

% a.out

DataInt disimpan di alamat :

3221219828

% a.out

DataInt disimpan di alamat :

3221219700

% a.out

DataInt disimpan di alamat :

3221219572

#include <stdio.h>

int main() {

int DataInt = 5;

printf(“DataInt disimpan di alamat : %u\n", &DataInt);

(4)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 7

Apa Itu Pointers ?

• Cara

mengakses

DataInt :

– Dengan

pengenal

DataInt

– Dengan alamat

3221219572

3221219572 3221219576 3221219580 3221219584 3221219560 3221219564 3221219568

5

?

?

DataInt

3221219572 3221219576 3221219580 3221219584 3221219560 3221219564 3221219568

5

?

?

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 8

Mendeklarasikan Sebuah

Pointer

• Syntax

type *identifier;

• Example

#include <stdio.h>

int main() {

int DataInt = 5;

int *PtrInt; PtrInt = &DataInt;

printf(“PtrInt adalah: %u\n", PtrInt);

(5)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 9

Mendeklarasikan Sebuah

Pointer

• Deklarasi dalam satu statemen

int

myInt,

*

intPtr, intArray[10];

S

e

bu

ah

Vari

abel

Se

bua

h

P

o

int

e

r

Sebuah

Array

Merunut Pointer

• Jika ingin merunut kemana sebuah pointer

menunjuk dalam suatu tempat di dalam

memori maka digunakan operator

dereferencing

*

*

PtrInt

• Dapat dilakukan

read

atau mengubah nilai

yang ditunjuk oleh pointer seperti jika kita

melakukan terhadap sebuah variabel

*

PtrInt = 6;

(6)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 11

Merunut Pointer

• Contoh

• Output

#include <stdio.h>

int main() {

int

DataInt = 5;

int *

PtrInt;

PtrInt =

&

DataInt;

printf

("

%i\n

",

*

PtrInt);

*

PtrInt = 7;

printf

("

%i\n

",

DataInt

);

}

5

7

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 12

Pointers dan Argumen

Function

• Kita dapat melewatkan nilai sebagai

sebuah argumen

• Hal ini disebut

pass-by-value

#include <stdio.h>

void

example(

int

x);

int main

() {

int

y = 5;

example(y);

printf

("

%i\n

", y);

}

void

example(

int

x)

{

x = 7;

}

5

X

Konteks untuk function main()

5

y

7

y

(7)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 13

Pointers dan Argumen

Function

• Bagaimana jika kita menginginkan

fungsi

example

dapat mempengaruhi

y dalam function

main()

?

– Dapat dilewatkan nilai ke functions

– Sebuah alamat adalah sebuah nilai

– Dapat melewatkan sebuah alamat ke

function

– Sebuah argumen dapat berupa pointer

– Dengan pointer kita dapat mengelola

variabel diluar jangkauan function.

• Hal ini disebut

pass-by-reference

Pointers dan Argumen

Function

• Example

#include <stdio.h>

void

example(

int *

ptr);

int main()

{

int

y = 5;

example(

&

y);

printf

("

%i\n

", y);

}

void

example

(int *

ptr

) {

*

ptr = 7;

}

5

X

5

y

5

ptr

3221 2195 72 3221 2195

3221 2195 72 3221 2195

7

Konteks untuk function main()

(8)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 15

Mengembalikan Nilai Lebih

Dari 1

• Biasanya function yang kita tulis

hanya dapat mengembalikan 1 nilai

• Sekarang kita dapat menulis sebuah

function yang mengembalikan lebih

dari satu hal.

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 16

Mengembalikan Nilai Lebih

Dari 1

• Contoh : Program Pertukaran Nilai

#include <stdio.h>

void tukar(int *ptr1, int *ptr2); int main() {

int num1=1, num2=2;

tukar(&num1,&num2);

printf("%i,%i\n", num1, num2);

}

void tukar(int *ptr1, int *ptr2) { int temp;

temp = *ptr1; // 1

*ptr1 = *ptr2; // 2

*ptr2 = temp; // 3

}

temp

num2 num1

3 1

2

temp

num2 num1

3 1

(9)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 17

Pointer dan Array

• Ketika mendeklarasikan array, maka

sistem operasi akan mengalokasikan

memori

• Setelah mengalokasikan memori,

sistem operasi akan memberi

alamat elemen pertama array.

int

a[5];

2 3 4 0 1 2 3 4 0

0 11 22 33 44

a

Pointer dan Array

• Pengenal untuk sebuah array adalah

sebuah pointer ke elemen pertama dari

array.

• Sehingga kita dapat menggunakan

notasi pointer dan notasi array untuk

menunjuk lokasi yang sama.

int

a[5];

int *

ptr;

ptr

=

a;

ptr[2] = 123;

2 3 4

0 1 2 3 4

0

0 11 22 33 44

a

ptr

(10)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 19

Pointer dan Array

• Passing Array ke Function

– Jika kita melewatkan array sebagai argumen ke

sebuah function, maka salinan array yang

dibuat tidak seperti jika kita melewatkan

sebuah argumen biasa.

– Yang dilewatkan adalah alamat awal dari array.

– Jika kita membuat perubahan ke array dalam

function, maka perubahan akan berlaku pada

array yang sebenarnya.

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 20

Pointer dan Array

• Kadang, pointer digunakan seperti jika

kita menggunakan array sebagai sebuah

argumen.

void

getMessage

(char

mes[]) {...

memiliki arti yang sama dengan :

void

getMessage

(char *

mes) {...

• Sebagai contoh dalam library

string.h

:

(11)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 21

Aritmetika Pointer

• Sebuah alamat adalah sebuah

bilangan

• Sehingga kita dapat melakukan

operasi pada sebuah alamat yang

disimpan dalam pointer untuk

mendapatkan alamat relatif dari

sebuah memori.

h

e

l

l

o

\0

0

1

2

3

4

5

6

7

str

str+3

h

e

l

l

o

\0

0

1

2

3

4

5

6

7

str

str+3

Aritmetika Pointer

• Contoh :

printf()

dengan

%s

membutuhkan sebuah

titik awal string dan akan

mencetak sampai

ditemukan

'\0'

– Dalam contoh, jika

digunakan

str

maka akan

muncul output "

hello"

– Jika digunakan 3 karakter

setelah lokasi yang

pertama (

str+3

) maka

menghasilkan keluaran

"lo"

#include <stdio.h>

int main() {

char

str[8] = "hello";

printf

("

%s\n

", str);

printf

("

%s\n

",str+3);

}

h

e

l

l

o

\0

0 1 2 3 4 5 6 7

str

str+3

h

e

l

l

o

\0

0 1 2 3 4 5 6 7

str

(12)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 23

Aritmetika Pointer

• Substring

• Membandingkan 4 karakter terakhir

h

e

l

l

o

\0

0 1 2 3 4 5 6 7

str1

str1 + strlen(str1) - 4

t

e

s

t

.

t

0 1 2 3 4 5 6 7

x

t

h

e

l

l

o

\0

0 1 2 3 4 5 6 7

str2

str2 + strlen(str2) - 4

a

b

c

.

d

a

0 1 2 3 4 5 6 7

t

\0

8

\0 …

if( strcmp(str1+strlen(str1)-4, str2+strlen(str2)-4) == 0) { printf("4 karakter terakhir sama\n");

} else {

printf("4 karakter terakhir berbeda");

}

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 24

Aritmetika Pointer

• Jika akan mengakses 4 elemen

string, maka menggunakan notasi

array

str[3]

…atau menggunakan aritmetika

pointer

*(str+3)

– Arti : Menuju ke lokasi ke-3 dari

str

(13)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 25

Pointer Untuk Data Besar

• Jika kita menggunakan

pass-by-value

maka

akan dibuat salinan dari nilai yang kita

lewatkan.

• Hal ini tidak menimbulkan masalah untuk nilai

yang membutuhkan memori dengan jumlah

kecil.

• Jika sebuah function akan mengakses sebuah

data yang membutuhkan memori besar, maka

proses membuat salinan akan membutuhkan

waktu dan menghabiskan memori yang besar.

• Sehingga sebaiknya digunakan

pass-by-reference

untuk melewatkan data yang besar,

sehingga tidak menimbulkan masalah.

Pointer Untuk Data Besar

• Tetapi jika menggunakan

pass-by-reference,

maka perubahan data pada

function mempengaruhi data yang

sebenarnya.

• Jika kita tidak menginginkan perubahan

data tersebut, maka dapat digunakan

const

untuk menunjuk argumen dan ini

menyebabkan data sebenarnya tidak

akan ikut berubah.

(14)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 27

Array of Pointer

• Konsep dasar: jika Anda butuh

banyak pointer

buatlah array of

pointer

• Seperti apakah ilustrasi array of

pointer?

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 28

Array of Pointer

Setiap elemen berisi

alamat dari sebuah

lokasi di dalam memori

[0] [1] [2] [3] [4] [5] [6] [7] [8]

(15)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 29

PENDEKLARASIAN

ARRAY OF POINTERS

• Bandingkan beberapa deklarasi berikut:

– Integer bukan array :

int

i;

– Pointer ke integer

:

int *

ip;

– Array 9 integer

:

int

intAra[9];

– Array 9 pointer ke integer:

int *

intPtrAra[9];

• Tips: agar mudah dipahami,

bacalah deklarasi dari KANAN ke KIRI

PENDEKLARASIAN

ARRAY OF POINTER

• Bagaimana dengan pointer ke array of

char?

• Contoh:

char *

kota[5];

• Deklarasi dan inisialisasi pointer dapat

dilakukan pada saat yang sama.

Contoh:

char *

kota[5] = {“Jakarta”,

(16)

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 31

PENDEKLARASIAN

PENDEKLARASIAN

ARRAY OF POINTER

ARRAY OF POINTER

#include <stdio.h> #include <conio.h> main()

{ int ctr;

char *cities[3] = {“Yogya”,”Jakarta”,”BandarLampung”};

clrscr();

printf(“Menampilkan Kota”);

for (ctr = 0;ctr < 3;ctr++)

{ printf(“%s”,cities[ctr]);}

cities[0] = “Sleman”; cities[1] = “Bekasi”; cities[2] = “Kotabumi”;

printf(“Menampilkan Kota setelah diubah”);

for (ctr = 0;ctr < 3;ctr++)

{ printf(“%s”,*(cities+ctr));} }

Pert. 3a Struktur Data - FMIPA USD - 2003 Hal. 32

POINTER SEBAGAI

PARAMETER

Referensi

Dokumen terkait

Pemecahan masalah pembelajaran permainan sepak bola di Sekolah Dasar Negeri Penusupan 04 Kecamatan Pangkah Kabupaten Tegal melalui teknik menggiring bola

Pengaruh pemberian olesan minyak cengkeh ( Syzygium Aromaticum L ) terhadap proses penyembuhan luka insisi pada hewan coba mencit terjadi pemendekan luka

Berkaitan dengan tugas menetapkan kegiatan dan jadwal acara rapat DPRD, Panitia Musyawarah menetapkan acara DPRD untuk satu masa sidang atau sebagian dari suatu masa

Kesimpulan dari penelitian ini, bahwa hibah berdasarkan hukum Adat meskipun sah secara hukum adat tetapi tidak dapat dijadikan sebagai syarat dalam pendaftaran tanah di

Manfaat penelitian ini adalah untuk mengetahui ciri – ciri anak autis sehingga orang tua dapat mengetahui gejala anak autis sejak dini dan dapat merancang media edukasi

Dengan persepsi yang demikian ini, dimungkinkan mahasiswa menjadi bersemangat dalam berlatih, dan tampil penuh, sehingga pada akhir program penelitian (akhir siklus

Dari keempat penyebab tingkat kerusakan bangunan tersebut, ada dua hal yang bisa diupayakan untuk mengurangi jumlah korban akiba t gempa bumi yaitu meningkatkan

Berdasarkan pengamatan menggunakan mikroskop dengan perbesaran 400 kali, menunjukkan bahwa baik tanaman monokotil maupun dikotil yang tumbuh di