Selamat datang di eagleboot dan selamat membaca.
terry berisi nilai 1702 dan bukan 'h' atau "hello", walaupun 1702 menunjuk pada karakter tersebut. Sehingga jika akan dilakukan perubahan pada karakter 'o' diganti dengan tanda '!' maka ekspresi yang digunakan ada 2 macam : terry[4] = '!'; *(terry+4) = '!'; Penulisan terry[4] dan *(terry+4), mempunyai arti yang sama. Jika digambarkan: ‘h’ ‘e’‘l’‘l’‘!’‘\0’ 1702 17031704170517061707 terry 1702 terry[4] *(terry+4) Gambar 13.8 Deklarasi “Hello” pada Alamat Terry[4] Diisi ! Perhatikan contoh program dibawah, dimana char memerlukan 1 byte, short memerlukan 2 bytes dan long memerlukan 4. Terdapat 3 buah pointer : char*mychar; short*myshort; long*mylong; ekspresi diatas akan menunjuk pada lokasi dimemory masing-masing 1000, 2000 and 3000, sehingga jika dituliskan : mychar++;myshort++;mylong++; mychar, akan bernilai 1001, myshort bernilai 2002, dan mylong bernilai 3004. Alasannya adalah ketika terjadi pertambahan maka akan ditambahkan dengan tipe yang sama seperti yang didefinisikan berupa ukuran dalam bytes
Perhatikan ekspresi dibawah ini : *p++;*p++=*q++; Ekspresi pertama equivalen dengan *(p++) dan yang dilakukan adalah menambahkan p (yaitu alamat yang ditunjuk, bukan nilai yang dikandungnya). Ekspresi kedua, yang dilakukan pertama adalah memberikan nilai *q ke *p dan kemudian keduanya ditambahkan 1 atau dengan kata lain : *p=*q;p++;q++; Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk pada tipe data apapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya.
Program 13.3 include<iostream.h> usingnamespacestd; voidincrease(void*data,inttype) { switch(type) { casesizeof(char):(*((char*)data))++;break; casesizeof(short):(*((short*)data))++;break; casesizeof(long):(*((long*)data))++;break; } } intmain() { chara=5; shortb=9; longc=12; increase(&a,sizeof(a)); increase(&b,sizeof(b)); increase(&c,sizeof(c)); cout<<(int)a<<","<<b<<","<<c; return0; }
Keluaran program diatas adalah sebagai berikut: 6,10,13
Next read halaman 4.
terry berisi nilai 1702 dan bukan 'h' atau "hello", walaupun 1702 menunjuk pada karakter tersebut. Sehingga jika akan dilakukan perubahan pada karakter 'o' diganti dengan tanda '!' maka ekspresi yang digunakan ada 2 macam : terry[4] = '!'; *(terry+4) = '!'; Penulisan terry[4] dan *(terry+4), mempunyai arti yang sama. Jika digambarkan: ‘h’ ‘e’‘l’‘l’‘!’‘\0’ 1702 17031704170517061707 terry 1702 terry[4] *(terry+4) Gambar 13.8 Deklarasi “Hello” pada Alamat Terry[4] Diisi ! Perhatikan contoh program dibawah, dimana char memerlukan 1 byte, short memerlukan 2 bytes dan long memerlukan 4. Terdapat 3 buah pointer : char*mychar; short*myshort; long*mylong; ekspresi diatas akan menunjuk pada lokasi dimemory masing-masing 1000, 2000 and 3000, sehingga jika dituliskan : mychar++;myshort++;mylong++; mychar, akan bernilai 1001, myshort bernilai 2002, dan mylong bernilai 3004. Alasannya adalah ketika terjadi pertambahan maka akan ditambahkan dengan tipe yang sama seperti yang didefinisikan berupa ukuran dalam bytes
Perhatikan ekspresi dibawah ini : *p++;*p++=*q++; Ekspresi pertama equivalen dengan *(p++) dan yang dilakukan adalah menambahkan p (yaitu alamat yang ditunjuk, bukan nilai yang dikandungnya). Ekspresi kedua, yang dilakukan pertama adalah memberikan nilai *q ke *p dan kemudian keduanya ditambahkan 1 atau dengan kata lain : *p=*q;p++;q++; Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk pada tipe data apapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya.
Program 13.3 include<iostream.h> usingnamespacestd; voidincrease(void*data,inttype) { switch(type) { casesizeof(char):(*((char*)data))++;break; casesizeof(short):(*((short*)data))++;break; casesizeof(long):(*((long*)data))++;break; } } intmain() { chara=5; shortb=9; longc=12; increase(&a,sizeof(a)); increase(&b,sizeof(b)); increase(&c,sizeof(c)); cout<<(int)a<<","<<b<<","<<c; return0; }
Keluaran program diatas adalah sebagai berikut: 6,10,13
Next read halaman 4.