Anda di halaman 1dari 50

POINTER

By :
Agustin Amanda Zatalini A11.2016.09860
Syafrie Naufal Mahendra A11.2016.09861
Aziz Umar A11.2016.09884
Nur Atha Oktigalas A11.2016.09885
Fatma Ahardika Nurfaizal A11.2016.09889
2
Alamat Memori dari suatu variabel
char ch = A;

ch:

0x2000 A

Alamat memori Nilai dari


dr variabel ch. variabel ch.
3

Operator &
Alamat memori dr suatu obyek
char ch = A;

0x2000 A
&ch Shg ch bernilai 0x2000

dikenal sebagai address operator.


4

Contoh:

char ch;
printf(%p, &ch);

conversion specifier utk


mencetak alamat memori
5 Pointer

Suatu variabel dapat disimpan


dalam alamat memori dari
variabel lainnya
0x3A15

0x2000
chPtr

0x1FFE 0x1FFF 0x2000 0x2001 0x2002


etc.
B
ch
6

Pointer
Suatu pointer adalah suatu variable.
Berisi sebuah memory address.
Menunjuk ke suatu tipe data .

Variabel Pointer biasa dinamakan dg varPtr.


7 Contoh:
char* cPtr;
cPtr:
0x2004

Dpt menyimpan alamat dr


variabel bertipe char

Kita tulis cPtr sbg pointer ke char.


8 Pointers dan operator &

Contoh: char c = A;
char *cPtr;

cPtr = &c; Assign alamat c ke


cPtr.

c: cPtr:
0x2000 0x2004
A 0x2000
9 Catatan pada Pointer

Kita dpt memiliki pointer ke data apa saja


Contoh: int* numPtr;
float* xPtr;

Tanda * dapat diletakan diantara tipe


dan nama variabel.
Contoh: int *numPtr;
float * xPtr;
Catatan pada Pointer
10

Kita dpt meng-assign alamat variabel ke pointer


yang compatible dg menggunakan operator &.
int aNumber;
int *numPtr;
Contoh:
numPtr = &aNumber;

Kita dpt mencetak alamat yg disimpan dalam


pointer menggunakan konversi %p
Contoh: printf(%p, numPtr);
Catatan pada Pointer
11

Hati-hati pointer belum


int *numPtr; di inisialisasikan

???
numPtr
Catatan pada Pointer
12

Saat mendeklarasikan pointer, lebih


baik selalu meng-inisialisasikannya ke
NULL (konstanta pointer khusus ).

int *numPtr = NULL;

NULL
numPtr
*
13

Operator

Mengijinkan pointer mengakses variabel


yang ditunjuknya.
Dikenal sbg operator dereferencing
Jangan bingung dengan * dalam deklarasi
pointer
14

Pointer dan Operator


Contoh: char c = A;
char *cPtr = NULL;

Merubah nilai variabel


cPtr = &c; yg menunjuk ke cPtr
*cPtr = B;

c: cPtr:
0x2000 0x2004
B
A 0x2000
Langkah mudah pada Pointer
15

Step 1: Deklarasikan variabel yg ditunjuk.

int num;
char ch = A;
float x;

num:

ch: A

x:
Langkah mudah pada Pointer
16

Step 2: Deklarasikan variabel pointer.

int num;
char ch = A;
float x; numPtr:
int* numPtr = NULL; chPtr:
char *chPtr = NULL;
float * xPtr = NULL; xPtr:

num:

ch: A

x:
Langkah mudah pada Pointer
17

Step 3: Assign alamat dari variabel ke pointer.

int num;
char ch = A;
float x; numPtr: addr dr num

int* numPtr = NULL; chPtr: addr dr ch


char *chPtr = NULL;
float * xPtr = NULL; xPtr: addr dr x
numPtr = #
chPtr = &ch;
xPtr = &x; num:

ch: A
Tipe Pointer memiliki hub pada tipe
x:
var yg ditunjuknya
Langkah mudah pada Pointer
18

Step 4: De-reference pointer.

int num;
char ch = A;
float x; numPtr: addr dr num

int* numPtr = NULL; chPtr: addr dr ch


char *chPtr = NULL;
float * xPtr = NULL; xPtr: addr dr x
numPtr = #
chPtr = &ch;
xPtr = &x; num: 65
*xPtr = 0.25;
*numPtr = *chPtr; ch: A

x: 0.25
Pointer dan Parameter Function
19

Contoh: Fungsi menukar nilai 2 var:

x: 1 x: 2
tukar
y: 2 y: 1
#include <stdio.h>
Bad swap
20 void
swap1(int a, int b)
{
int tmp;

tmp = a;
a = b;
b = tmp;
}

main()
{
int x = 1, y = 2;

swap1(x, y);
printf(%d %d\n, x, y);
}
#include <stdio.h>
Bad swap
21 void
swap1(int a, int b)
{
int tmp;

tmp = a;
a = b;
b = tmp;
}

main()
{
x:
int x = 1, y = 2; 1

swap1(x, y); y:
2
printf(%d %d\n, x, y);
}
#include <stdio.h>
Bad swap
22 void
swap1(int a, int b) tmp:
{
int tmp; a:
1
tmp = a;
b:
a = b; 2
b = tmp;
}

main()
{
x:
int x = 1, y = 2; 1

swap1(x, y); y:
2
printf(%d %d\n, x, y);
}
#include <stdio.h>
Bad swap
23 void
swap1(int a, int b) tmp:
{ 1
int tmp; a:
1
tmp = a;
b:
a = b; 2
b = tmp;
}

main()
{
x:
int x = 1, y = 2; 1

swap1(x, y); y:
2
printf(%d %d\n, x, y);
}
#include <stdio.h>
Bad swap
24 void
swap1(int a, int b) tmp:
{ 1
int tmp; a:
2
tmp = a;
b:
a = b; 2
b = tmp;
}

main()
{
x:
int x = 1, y = 2; 1

swap1(x, y); y:
2
printf(%d %d\n, x, y);
}
#include <stdio.h>
Bad swap
25 void
swap1(int a, int b) tmp:
{ 1
int tmp; a:
2
tmp = a;
b:
a = b; 1
b = tmp;
}

main()
{
x:
int x = 1, y = 2; 1

swap1(x, y); y:
2
printf(%d %d\n, x, y);
}
#include <stdio.h>
Bad swap
26 void
swap1(int a, int b) tmp:
{ 1
int tmp; a:
2
tmp = a;
b:
a = b; 1
b = tmp;
}

main()
{
x:
int x = 1, y = 2; 1

swap1(x, y); y:
2
printf(%d %d\n, x, y);
}
#include <stdio.h>
Good swap
27 void
swap2(int* a, int* b)
{
int tmp;

tmp = *a;
*a = *b;
*b = tmp;
}

main()
{
int x = 1, y = 2;

swap2(&x, &y);
printf(%d %d\n, x, y);
}
#include <stdio.h>
Good swap
28 void
swap2(int* a, int* b)
{
int tmp;

tmp = *a;
*a = *b;
*b = tmp;
}

main()
{
x:
int x = 1, y = 2; 1

swap2(&x, &y); y:
2
printf(%d %d\n, x, y);
}
#include <stdio.h>
Good swap
29 void
swap2(int* a, int* b) tmp:
{
int tmp; a:
addr dr x
tmp = *a;
b:
*a = *b; addr dr y
*b = tmp;
}

main()
{
x:
int x = 1, y = 2; 1

swap2(&x, &y); y:
2
printf(%d %d\n, x, y);
}
#include <stdio.h>
Good swap
30 void
swap2(int* a, int* b) tmp:
{ 1
int tmp; a:
addr dr x
tmp = *a;
b:
*a = *b; addr dr y
*b = tmp;
}

main()
{
x:
int x = 1, y = 2; 1

swap2(&x, &y); y:
2
printf(%d %d\n, x, y);
}
#include <stdio.h>
Good swap
31 void
swap2(int* a, int* b) tmp:
{ 1
int tmp; a:
addr dr x
tmp = *a;
b:
*a = *b; addr dr y
*b = tmp;
}

main()
{
x:
int x = 1, y = 2; 2

swap2(&x, &y); y:
2
printf(%d %d\n, x, y);
}
#include <stdio.h>
Good swap
32 void
swap2(int* a, int* b) tmp:
{ 1
int tmp; a:
addr dr x
tmp = *a;
b:
*a = *b; addr dr y
*b = tmp;
}

main()
{
x:
int x = 1, y = 2; 2

swap2(&x, &y); y:
1
printf(%d %d\n, x, y);
}
#include <stdio.h>
Good swap
33 void
swap2(int* a, int* b)
{
int tmp;

tmp = *a;
*a = *b;
*b = tmp;
}

main()
{
x:
int x = 1, y = 2; 2

swap2(&x, &y); y:
1
printf(%d %d\n, x, y);
}
34
Pointer dan Argumen Function

Merubah nilai dari variabel diactual parameter

scanf.
char ch;
int numx;
float numy;
scanf(%c %d %f, &ch, &numx, &numy);
35 Pointer dan Array

int *ptr;
*ptr = 2;
Misal integer 2 byte (ptr) terletak pada alamat memory 10010
Bagaimana jika ditulis ptr + 1; berapa alamat memory yang ditunjuk ?
36 Pointer dan Array

Misal terdefinisi sbb:


int my_array[] = {1,23,17,4,-5,100};
Akses array dengan pointer :
int *ptr;
ptr = &my_array[0];
37 Pointer dan Array

#include <stdio.h>
int my_array[] = {1,23,17,4,-5,100};
int *ptr;
int main()
{
int i;
ptr = &my_array[0];
printf("\n\n");
for (i = 0; i < 6; i++)
{
printf("my_array[%d] = %d ",i,my_array[i]);
printf("ptr + %d = %d\n",i, *(ptr + i));
}
return 0; RUBAH
}
printf("ptr + %d = %d\n",i, *ptr++);
printf("ptr + %d = %d\n",i, *(++ptr));
38 Pointer dan String

char my_string[40];
my_string[0] = 'T';
my_string[1] = 'e';
my_string[2] = 'd':
my_string[3] = '\0';
char my_string[40] = {'T', 'e', 'd', '\0',};
char my_string[40] = "Ted";
39 Pointer dan String

#include <stdio.h>
char strA[80] = Suatu string hanya untuk demonstrasi";
char strB[80];
int main()
{
char *pA; /* suatu pointer bertipe character */
char *pB; /* suatu pointer bertipe character */
puts(strA); /* menampilkan string A */
pA = strA; /* pA menunjuk pada string A */
puts(pA); /* menampilkan yang di tunjuk oleh pA*/
pB = strB; /* pB menunjuk string B */
putchar('\n'); /* ganti baris baru */
while(*pA != '\0') /* baris A (lihat text) */
{
*pB++ = *pA++; /* baris B (lihat text) */
}
*pB = '\0'; /* baris C (lihat text) */
puts(strB); /* menampilkan strB pada layar */
return 0;
}
40 Copy String

char strA[80] = "A string to be used for demonstration purposes";


char strB[80] = "12345678901234567890123456789012345678901234567890"
char *my_strcpy(char *destination, char *source){
char *p = destination;
while (*source != '\0')
{
*p++ = *source++;
}
*p = '\0';
return destination;
}
int main(){
my_strcpy(strB, strA);
puts(strB);
return 0;
}
41 Copy String

char *my_strcpy(char dest[], char source[]){


int i = 0;
while (source[i] != '\0')
{
dest[i] = source[i];
i++;
}
dest[i] = '\0';
return dest;
}
42 Pointer dan Struktur

struct tag {
char lname[20]; /* nama belakang*/
char fname[20]; /* nama depan */
int age; /* umur*/
float rate; /*12.75/jam */
};
43 Pointer dan Struktur

#include <stdio.h>
#include <string.h>
struct tag {
char lname[20];
char fname[20];
int age;
float rate;
};
struct tag my_struct;
int main()
{
strcpy(my_struct.lname,"Jensen");
strcpy(my_struct.fname,"Ted");
printf("\n%s ",my_struct.fname);
printf("%s\n",my_struct.lname);
return 0;
}
44 Pointer dan Struktur

struct tag *st_ptr;


st_ptr = &my_struct;

(*st_ptr).age = 63;
st_ptr->age = 63;
45 Pointer dan Struktur

void show_name(struct tag *p)


#include <stdio.h> {
#include <string.h> printf("\n%s ", p->fname);
struct tag{ /* p points to a structure */
char lname[20]; char fname[20]; printf("%s ", p->lname);
int age; float rate; printf("%d\n", p->age);
};
struct tag my_struct; }
void show_name(struct tag *p);
int main(void)
{
struct tag *st_ptr; /* pointer ke structure */
st_ptr = &my_struct; /* pointer menunjuk ke my_struct */
strcpy(my_struct.lname,"Jensen");
strcpy(my_struct.fname,"Ted");
printf("\n%s ",my_struct.fname);
printf("%s\n",my_struct.lname);
my_struct.age = 63;
show_name(st_ptr); /* pass the pointer */
return 0;
}
46 Alokasi Dinamis Pointer

malloc(size_t size)
Argumen tunggal : jmlh blok yang di alokasikan
Tidak meng-inisialisasikan memory ke NOL
ptr=(cast-type*)malloc(byte-size)
ptr=(int*)malloc(100*sizeof(int));
calloc(size_t num, size_t size)
Argumen ganda : jmlh blok yang dialokasikan dan ukuran
tiap blok-nya
Menginisialisasikan memory ke NOL
ptr=(cast-type*)calloc(n,element-size);
ptr=(float*)calloc(25,sizeof(float));
47 Alokasi Dinamis Pointer

free(var ptr)
Argumen tunggal : ptr yang akan di hapus
free(ptr)
realloc(var ptr, size_t size)
Argumen ganda : var yang akan di realokasi dan ukuran baru jmlh blok-nya
48 malloc
#include <stdio.h>
#include <stdlib.h>
int main(){
int n,i,*ptr,sum=0;
printf(Masukan jumlah elemen: ");
scanf("%d",&n);
ptr=(int*)malloc(n*sizeof(int)); //alokasi memory
if(ptr==NULL) {
printf("Error! memory not allocated.");
exit(0);
}
printf(Masukan jumlah elemen array: ");
for(i=0;i<n;++i) {
scanf("%d",ptr+i);
sum+=*(ptr+i);
}
printf(Jumlah=%d",sum);
free(ptr);
return 0;
}
49 calloc
#include <stdio.h>
#include <stdlib.h>
int main(){
int n,i,*ptr,sum=0;
printf(Masukan jumlah elemen: ");
scanf("%d",&n);
ptr=(int*)calloc(n,sizeof(int)); //alokasi memory
if(ptr==NULL) {
printf("Error! memory not allocated.");
exit(0);
}
printf(Masukan jumlah elemen array: ");
for(i=0;i<n;++i) {
scanf("%d",ptr+i);
sum+=*(ptr+i);
}
printf(Jumlah=%d",sum);
free(ptr);
return 0;
}
50 realloc

#include <stdio.h>
#include <stdlib.h>
int main(){
int *ptr,i,n1,n2;
printf(Masukan elemen array: ");
scanf("%d",&n1);
ptr=(int*)malloc(n*sizeof(int)); //alokasi memory
printf(Alamat sebelum alokasi memory: ");
for(i=0;i<n1;++i)
printf("%u\t",ptr+i);
printf(Masukan elemen array baru: ");
scanf("%d",&n2);
ptr=realloc(ptr,n2);
for(i=0;i<n2;++i) {
printf("%u\t",ptr+i);
}
return 0;
}

Anda mungkin juga menyukai