• 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

model memori dan tipe data ini berhubungan dengan pemakaian memori komputer pada saat program yang kita buat sedang berjalan, jika program yang dibuat masih

Menurut pemahaman saya, Load Balancing ini membuat sebuah Domain Name Server, namun domain tersebut memiliki 3 buah alamat. Jika kita melakukan uji koneksi, maka hasilnya alamat

Contoh misal saat kita membuat sebuah parameter yang sama dengan nama atribut yang ada dalam sebuah kelas, maka jika kita menggunakanparameter tersebut untuk

Jika paper perlu merujuk ke alamat email atau URL di artikel, alamat atau URL lengkap harus diketik dengan font biasa.. Persamaan secara berurutan diikuti dengan

Jika fungsi assign() harus kita panggil dengan didahului oleh pendeklarasian sebuah objek, kemudian fungsi dari objek tersebut dipanggil dengan operator titik disertai nilai

Jika sebelumnya dengan variabel kita bisa menyimpan 1 nilai, maka dengan array, kita bisa mengumpulkan beberapa nilai yang berbeda ke dalam sebuah wadah.. Nilai-nilai yang berbeda

Jika sudah menjadi sebuah video maka kita harus melakukan evaluasi terlebih dahulu, apakah video tersebut masih ada yang kurang atau ada yang harus ditambahkan sehingga video yang

PENGELOLAAN ARRAY  Variabel-variabel yang kita gunakan selama ini adalah variable biasa yang memiliki sifat bahwa sebuah nama variable hanya dapat menyatakan sebuah nilai numeric atau