650 likes | 825 Views
Algoritma dan Struktur Data. Pointer Pada Struct. REVIEW POINTER. Memori Komputer. Komputer menyimpan variabel program di satu atau beberapa slot pada memori Tiap slot memori memiliki nomor atau alamat tertentu. Tambahkan & sebelum variabel x.
E N D
Algoritma dan Struktur Data Pointer Pada Struct
Memori Komputer • Komputer menyimpan variabel program di satu atau beberapa slot pada memori • Tiap slot memori memiliki nomor atau alamat tertentu
Tambahkan & sebelum variabel x Di slot memori nomer berapa sebuah variabel disimpan ? #include <stdio.h> #include <conio.h> void main() { int x; x = 10; printf("x berada di slot memori nomor : %d", &x); getch(); }
Pointer • Nomor atau alamat slot memori di mana variabel disimpan dapat disimpan pada variabel lain • Variabel tersebut dinamakan pointer • Pointer tidak menyimpan isi variabel, tetapi menyimpan alamat / nomor slot di mana isi variabel berada
Pointer • Pointer adalahvariabel yang menyimpanalamatdarivariabel yang lainnya. • Deklarasi pointer : <type> *ptr_name; • Dua operator yang seringdigunakanpada pointer : * (content of) dan & (address of). • Contoh Inisialisasisebuah integer pointer ke data variable: inti, *ptr; ptr = &i; Untukmerubahisi/nilaiygditunjukoleh pointer: *ptr = 5; /* samaartinyadgni=5 */
Contoh #include <stdio.h> #include <conio.h> void main() { int x; int *px; x = 10; px = &x; printf("x berada di slot memori nomor : %d", px); getch(); }
Mengakses nilai variabel • Nilai sebuah variabel bisa diakses melalui dua cara • Cara 1 : Langsung • Cara 2 : Menggunakan pointer
Contoh #include <stdio.h> #include <conio.h> void main() { int x; int *px; x = 10; px = &x; printf("nilai x diakses secara langsung : %d\n", x); printf("nilai x diakses melalui pointer : %d", *px); getch(); }
An Illustration int i = 5, j = 10; int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
An Illustration int i = 5, j = 10; int *ptr; /* declare a pointer-to-integer variable */ int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
An Illustration int i = 5, j = 10; int *ptr; int **pptr; /* declare a pointer-to-pointer-to-integer variable */ ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2; Double Indirection
An Illustration int i = 5, j = 10; int *ptr; int **pptr; ptr = &i; /* store address-of i to ptr */ pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
An Illustration int i = 5, j = 10; int *ptr; int **pptr; ptr = &i; pptr = &ptr; /* store address-of ptr to pptr */ *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
An Illustration int i = 5, j = 10; int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
An Illustration int i = 5, j = 10; int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
An Illustration int i = 5, j = 10; int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
An Illustration int i = 5, j = 10; int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
An Illustration int i = 5, j = 10; int *ptr; int **pptr; ptr = &i; pptr = &ptr; *ptr = 3; **pptr = 7; ptr = &j; **pptr = 9; *pptr = &i; *ptr = -2;
Pointer to Pointer • Pointer to pointer adalah variabel yang menyimpan alamat dari pointer yang lainnya. • Deklarasi pointer : <type> **ptr_ptr ; • Contoh int i, *ptr, **ptr_ptr ; ptr = &i; ptr_ptr = &ptr; Untuk merubah nilai variabel i bisa melalui sbb: *ptr = 5; // sama artinya dgn i=5 ; **ptr_ptr = 9; //sama artinya dgn i=9; atau *ptr=9;
Operasi pada pointer • Apa arti ptr + 1? • Alamat slot sesudahnya! • Apa arti ptr - 1? • Alamat slot sebelumnya! • Apa arti ptr * 2 and ptr / 2? • Invalid operations!!!
Operasi pada pointer • Apa arti *ptr + 1 • ? • Apa arti *ptr - 1 • ? • Apa arti *ptr * 2 and ptr / 2 • ?
REVIEW Pass by Value & Pass by Reference
Latihan • Variabel atau data untuk main dan hitungluas terletak di bagian memori berbeda • Keduanya tidak berhubungan • Gambarkan keadaan memori untuk main dan hitungluas!
Pass by Value • Jika kita mengubah nilai variabel p di hitungluas, apakah variabel panjang di main nilainya berubah?
Pass by Value • Pada saat main memanggil fungsi hitungluas, isi variabel panjang dan lebar dicopy kemudian dikirim ke hitungluas • Di fungsi hitungluas, nilai tersebut dimasukkan ke variabel p dan l • Merubah nilai p dan l tidak berakibat apa-apa pada variabel panjang dan luas • Ingat, variabel main dan hitungluas terletak di bagian memori yang berbeda!
Pass by Reference • Bagaimana cara mengubah nilai variabel panjang pada main dari fungsi hitungluas? • Pada saat memanggil hitungluas, jangan mengirim nilai panjang • Kirim alamat variabel panjang ke hitung luas • Hitungluas dapat mengakses & mengubah isi variabel panjang milik main secara indirect
Pass by Reference • Variabel v ada di fungsi F • F memanggil fungsi G • G perlu mengubah nilai v di F • Jangan mengirim nilai v ke G • Kirim alamat v • G dapat mengakses v di F secara indirect • G dapat mengubah nilai v di F
Latihan • Buatlah fungsi untuk menukar isi dua variabel bertipe float!
Using a Pass by Value Is like giving someone the key to your home The key can be used by the other person to change the contents of your home!
Additional Terms Pass-by-reference is also called . . . pass-by-address, or pass-by-location Can you explain why?
LATIHAN • Contoh : Pengiriman parameter by location #include <stdio.h> void Hitung (int X, int Y, int *P, int *Q) {*P= X + Y; *Q= X * Y; x=0; y=1; printf(“Dalam Fungsi Hitung nilai X: %d ,\n Nilai Y: %d”, X,Y); } void main() {int X, Y, PA, QA; /*local variabel*/ printf(“ X=”); scanf(“%d”,&X); printf(“ Y=”); scanf(“%d”,&Y); Hitung(X,Y,&PA,&QA); printf(“Dalam Fungsi Main nilai X: %d ,\n Nilai Y: %d”, X,Y); printf(”Nilai PA= %d\n”, PA); printf(”Nilai QA= %d\n”, QA); }
DefinisiStruct • User defined data type • Berisibeberapavariabel yang bisaberbedatipenyamasing-masingdisebutelemenyang dikelompokkanmenjadisatudengansebuahnamabaru • Miriprepresentasisebuah object beserta properties-nya. Contoh: struct MHS setidaknyapunyaelemenuntuk NPM, NamadanAlamat.
DefinisidandeklarasiStruct Syntax: struct nama_struct { tipe_data_1 nama_var_1; tipe_data_2 nama_var_2; tipe_data_3 nama_var_3; …… };
struct • Penting untuk implementasi ADT / membuat tipe data baru • E.g., struct motor {float volts; //voltage of the motorfloat amps; //amperage of the motorint phases; //# of phases of the motorfloat rpm; //rotational speed of motor }; typedef struct motor motor;
Name of the type struct • E.g., struct motor {float volts;float amps;int phases;float rpm; }; typedef struct motor motor;
Members of the struct struct • E.g., struct motor {float volts;float amps;int phases;float rpm; }; typedef struct motor motor;