Pointer
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
Operator &
Alamat memori dr suatu obyek
char ch = A;
0x2000 A
&ch Shg ch bernilai 0x2000
Contoh:
char ch;
printf(%p, &ch);
0x2000
chPtr
Pointer
Suatu pointer adalah suatu variable.
Berisi sebuah memory address.
Menunjuk ke suatu tipe data .
Contoh: char c = A;
char *cPtr;
c: cPtr:
0x2000 0x2004
A 0x2000
9 Catatan pada Pointer
???
numPtr
Catatan pada Pointer
12
NULL
numPtr
*
13
Operator
c: cPtr:
0x2000 0x2004
B
A 0x2000
Langkah mudah pada Pointer
15
int num;
char ch = A;
float x;
num:
ch: A
x:
Langkah mudah pada Pointer
16
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
int num;
char ch = A;
float x; numPtr: addr dr num
ch: A
Tipe Pointer memiliki hub pada tipe
x:
var yg ditunjuknya
Langkah mudah pada Pointer
18
int num;
char ch = A;
float x; numPtr: addr dr num
x: 0.25
Pointer dan Parameter Function
19
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
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
#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
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
(*st_ptr).age = 63;
st_ptr->age = 63;
45 Pointer dan Struktur
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;
}