PDA

View Full Version : [ask] pointer in c++ dan delphi


asakura_lanaya
03-30-2009, 08:08 AM
sebelumnya mohon maaf klo saiya newbie
saya punya beberapa pertanyaan tentang pointer

pertanyaan:
1. Pointer itu apa sih ?
2. Kenapa sih kita harus pakai pointer ?
3. tolong buatkan contoh program sederhana tentang pointer !
4. jelaskan tiap bagian dari contoh program pointer !

mungkin itu saja pertanyaannya ! nih saiya palink ga ngerti sama pointer :shy:
mungkin ada yang bisa membantu ? sekalian buat referensi untuk teman-teman agar bisa saling berdiskusi. thx CMIIW

void
03-30-2009, 10:00 PM
pointer secara sederhana bisa diartikan sebagai tipe data yang nilainya mengarah pada nilai yang terdapat pada sebuah area memori (alamat memori).
penggunaan pointer dapat meningkatkan kinerja untuk operasi yang dilakukan secara berulang.
contoh program yang menggunakan pointer ada di bawah (contohnya menggunakan pointer terhadap parameter yang di-pass ke aplikasi ie. argv)
penjelasan alakadarnya ada pada snippet source code

/**
* pointer.c - contoh penggunaan pointer
* coded by void ;)
*/
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
if (argc < 2) { /* periksa parameter yang diberikan */
printf("aturan pakai: %s <nama>\n", argv[0]); /* jika parameter tidak ada tampilkan help */
exit(1); /* keluar */
}
printf("hello %s :)\n", argv[1]); /* tampilkan pesan dan parameter */
return 0; /* keluar */
}



contoh penggunaannya

bash-4.0$ # compile source codenya
bash-4.0$ gcc -s -o pointer pointer.c
bash-4.0$ # jalankan aplikasinya tanpa parameter
bash-4.0$ ./pointer
aturan pakai: ./pointer <nama>
bash-4.0$ # jalankan aplikasinya dengan parameter
bash-4.0$ ./pointer "sandra dewi"
hello sandra dewi :)
bash-4.0$

referensi:
http://en.wikipedia.org/wiki/Pointer_(computing)

asakura_lanaya
03-31-2009, 09:21 PM
1.int main(int argc, char **argv)
2.{
3. if (argc < 2) { /* periksa parameter yang diberikan */
4. printf("aturan pakai: %s <nama>\n", argv[0]); /* jika parameter tidak ada tampilkan help */
5. exit(1); /* keluar */
6. }
7. printf("hello %s :)\n", argv[1]); /* tampilkan pesan dan parameter */
8. return 0; /* keluar */
}


sebelumnya makasih banget penjelasannya dari om void !
gw mo nanya nih dari code di atas ....
look line 3, variable argc < 2 = maksudnya apa toh ?, kenapa ga 3 4 5 / 666

soal berikutnya line 4 sama line 7,
itu ada variable argv[] itu pointer ya ?
terus ada argv[0] sama argv[1] <== kok kyk array ya ?
padahal kan pointer itu alamat kan ?
duh bingungggggggg >_<:angry:

void
04-01-2009, 04:45 PM
btw, saya jawab menurut yang saya tahu ya :shy: (soalnya saya benar2 cupu alias newbie abis)
argc adalah jumlah argumen / parameter pada command line. jumlah minimalnya adalah 1, yaitu aplikasi yang sedang dieksekusi, dan nama aplikasi yang dieksekusi tersebut disimpan pada variabel argv, tepatnya argv[0]
seperti yang saya jelaskan di atas, variabel argv menampung parameter yang berada pada command line. kira2 seperti ini
bash-4.0$ killall enemy
argc = 2
argv[0] = killall
argv[1] = enemy
kalau masih bingung soal argc dan argv, mungkin bisa membuka lagi buku2 pemrograman C/C++ soalnya saya juga masih newbie soal pemrograman. kalau bisa, cari buku yang judulnya "C For Scientist and Engineers", sampai sekarang saya masih belajar dari buku itu.
nah, berikut ini sample kode serta penggunaannya untuk mengetahui nilai argc dan argv
#include <stdio.h>

int main(int argc, char **argv)
{
static int i;

printf("nilai argc: %lu\n", argc);
for (i = 0; i < argc; i++) {
printf("argv[%lu] -> %s\n", i, argv[i]);
}
return 0;
}
jika dieksekusi, maka contohnya seperti ini
bash-4.0$ ./test
nilai argc: 1
argv[0] -> ./test
bash-4.0$ ./test satu dua tiga empat capedeh
nilai argc: 6
argv[0] -> ./test
argv[1] -> satu
argv[2] -> dua
argv[3] -> tiga
argv[4] -> empat
argv[5] -> capedeh

potter
10-11-2009, 10:32 PM
halo, met kenal semuanya. Sebelumnya mohon maaf klo saya newbie, dan saya ada beberapa pertanyaan:



Saya kemaren pernah liat program menggunakan delphi tapi ada bagian dari program yang membuat saya kurang mengerti yaitu bagian pendevinisian variabel seperti berikut: var T: array[-7..39] of DWord; , fungsi array dari -7...39 utuk apa ya. karna yang saya tau array selalu dibuat dari bilangan bertanta +. misal 0,1,...dst.
Kegunaan pointer yang menggunakan tanda ^ dan @ seperti terlihat pada potongan program berikut: PDWord(longword(@OutData)+4)^:= Blk[1];


mohon kiranya temen-teman membantu saya, terimakasih.

xerion
10-11-2009, 11:42 PM
nah kucoba jawab yah :)

1. kalau itu tergantung programnya yang menggunakan array yang dimulai dari angka minus
misalnya ada fungsi yang dibuat untuk mengembalikan nilai error jika result < 0

2.
Tanda @ didepan variable untuk mengembalikan pointer variable tersebut.
misalnya p1 dideklarasikan sebagai pointer dan s1 sebagai string,

p1 := @s1;

maka p1 akan menunjuk alamat s1, sama seperti menggunakan fungsi Addr()

untuk tanda ^ didepan var pointer untuk mengembalikan nilai pointer tersebut.
misalnya : i1 dideklarasikan sebagai Integer, p1 sebagai PInteger, dan i2 sebagai Integer

i1 := 123; // beri nilai 123 ke var i1
p1 := @i1; // p1 menunjuk alamat var i1
i2 := p1^; // maka i2 akan berisi nilai yang sama


jika didepan nama record untuk mendeklarasikan pointernya

PMyRec = ^TMyRec;
TMyRec = record
a1,a2,a3,a4 : Byte;
end;


jadi untuk PDWord(longword(@OutData)+4)^:= Blk[1]; untuk menulis byte ke-4 setelah alamat memory OutData dengan Blk[1] ( <-- apa ini array of bytes ?)

Untuk lebih lanjut bisa membaca _http://delphi.about.com/od/objectpascalide/a/pointers.htm

momon
10-12-2009, 12:05 AM
@Atas: penjelasannya lumayan mudah dimengerti, tapi gw tetep bingung :(

potter
10-12-2009, 01:17 PM
terima kasih xerion, dengan adanya penjelasan anda saya mulai mengerti, untuk blk[0] di dalam programnya seperti berikut blk: array[0..3] of DWord;

untuk array dari -7... saya agak bingung mohon di jelaskan lagi, untuk procedure nya seperti berikut:

procedure initsialisasi(const Key; Size: longword);
var
i, j, M, U, W: DWord;
T: array[-7..39] of DWord;
KeyB: array[0..39] of DWord;
begin
Size:= Size div 8;
FillChar(KeyB,Sizeof(KeyB),0);
Move(Key,KeyB,Size);
Size:= Size div 4;
Move(vk,T,Sizeof(vk));
for i:= 0 to 38 do
begin
U:= T[i-7] xor T[i-2];
T[i]:= LRot32(U,3) xor KeyB[i mod DWord(Size)] xor i;
end;
T[39]:= Size;
for j:= 0 to 6 do // perluasan kunci dilakukan sebanyak 7 x
begin
for i:= 1 to 39 do
begin
U:= T[i] + s_box[T[i-1] and $1FF];
T[i]:= LRot32(U,9);
end;
U:= T[0] + s_box[T[39] and $1FF];
T[0]:= LRot32(U,9);
end;
for i:= 0 to 39 do
KeyData[(7*i) mod 40]:= T[i];
i:= 5;
repeat
U:= s_box[265+(KeyData[i] and $3)];
j:= KeyData[i+3] and $1f;
W:= KeyData[i] or $3;
gen_mask(W,M);
KeyData[i]:= W xor (LRot32(U,j) and M);
Inc(i,2);
until i>= 37;
end;


dimana vk dalam file .inc sperti berikut
vk: array[0..6] of DWord= (
$09d0c479, $28c8ffe0, $84aa6c39, $9dad7287, $7dff9be3, $d4268361,
$c96da1d4);

xerion
10-17-2009, 12:09 AM
12 for i:= 0 to 38 do
13 begin
14 U:= T[i-7] xor T[i-2];


soalnya pada bagian code diatas ada looping untuk i-7 dimana i akan bernilai 0 sampai 38.
pada array lookup dimana i-0 akan bernilai -7 sebagai awal dari array tersebut.
jika array T dimulai dari index 0, jadi semua bagian harus disesuaikan kembali.

semua itu tergantung pada alur program tersebut :)