Anda di halaman 1dari 10

PENUDING

Konsep Asas Penuding


Mendeklarasi Pembolehubah
Penuding
Menggunakan Penuding
Hubungkait Penuding dengan
Tatasusunan
Penuding dengan Fungsi
Aritmetik Penuding
UNIT
2
F4104 ALGORITMA & STRUKTUR DATA



14
2.1 Konsep asas penuding

Penuding atau penunjuk adalah satu pembolehubah yang digunakan untuk menunjuk
kepada sesuatu pembolehubah yang lain.
Penuding adalah sejenis data yang hanya menyimpan alamat ingatan, bukan nilai.
Setiap pembolehubah dalam sesuatu program mempunyai alamat tertentu dalam
ingatan di mana nilai boleh disimpan.
Jika sesuatu penuding menyimpan alamat sesuatu lokasi ingatan, penuding tersebut
dikatakan menuding atau menunjuk kepada lokasi tersebut.







Penunjuk adalah pembolehubah yang menunjuk kepada pembolehubah yang lain.
Ini bermaksud, penunjuk mengandungi lokasi / alamat data yang ditunjuknya.
Penunjuk mengandungi 2 bahagian. Penunjuk itu sendiri memegang alamat dan alamat
tersebut menunjuk kepada nilai tertentu.
Terdapat berbagai jenis penunjuk seperti penunjuk integer, penunjuk aksara, penunjuk
titik apung, dan lain-lain.
Anda perlu menakrifkan penunjuk sebelum menggunakannya.
Anda boleh menakrifkan penunjuk sejagat atau penunjuk setempat, bergantung kepada
di mana anda menakrifkannya.
Terdapat 2 operator penunjuk di dalam bahasa C :

& operator alamat
* operator penunjuk kepada

Sintaks :


Contoh:
int a, b, *p
a = b = 7;

Di dalam contoh di atas, a dan b adalah pembolehubah berjenis int and masing-masing
mempunyai nilai 7. P ialah penunjuk kepada nilai int.
Andaikan alamat pembolehubah a ialah 1220 dan alamat pembolehubah b ialah 1222.





Jika aturcara seperti p = &a diberikan, ini bermakna p mengandungi alamat
pembolehubah a.





*p bermaksud kandungan lokasi yang ditunjuk oleh p, jadi *p = 7



Poli = & it;
Pembolehubah penuding Operator alamat
Lokasi ingatan
jenisData *pembolehubah;
a
7
1220
b
7
1222
p


a
7
1220
b
7
1222
p
1220

F4104 ALGORITMA & STRUKTUR DATA



15
Operator penunjuk kepada

Perhubungan di antara p dan v (di mana p = &v dan v = *p)
p v









Alamat / Kandungan

Aturcara mudah yang menggambarkan hubungan di antara dua pembolehubah integer,
alamat yang bersesuaian dan penunjuk mereka.



















Alamat v Nilai v
Data item diwakili oleh v dan boleh dicapai oleh ungkapan *p
* adalah operator penunjuk kepada
#include <stdio.h>

main()
{
int x = 1;
int y = 2;
int *ip;

ip = &x;
y = *ip;
x = ip;
*ip = 3;

printf(\n ip = %d \t &x = %X \t y = %d, ip, &x, y);
printf(\n *ip = %d \t x = %X , *ip, x);
}
F4104 ALGORITMA & STRUKTUR DATA



16
Lokasi Memori
Rajah di bawah menunjukkan perwakilan memori untuk aturcara di disebelah










F4104 ALGORITMA & STRUKTUR DATA



17
2.2 Mendeklarasi pembolehubah penuding

Format asas pengisytiharan penuding:-




Jenis_data menakrifkan kepada kenis-jenis data asas seperti int, char, float, double
dll
Simbol * Operator nilai, menakrif bahawa nama_penuding adalah suatu
pembolehubah penuding
Nama_penuding nama yang diberikan kepada penuding



2.3 Menggunakan penuding : Capaian tidak langsung

Penuding capaian tidak langsung juga dikenali sebaai operator nyah-rujukan (*) /
dereference operator
Penuding jenis ini akan mengembalikan nilai yang terkandung dalam alamat yang
disimpan oleh penuding
Pembolehubah biasa mempunyai capaian terus kepada nilai yang terkandung di
dalamnya.
Operator capaian tidak langsung (*) bermaksud nilai yang terkandung dalam alamat
Contoh:-



Jenis_data * nama_penuding;
void main()
{ int x = 5;
int * pdg;
pdg = &x;

cout<<pdg = <<pdg<<endl;
cout<<*pdg = <<*pdg<<endl ;
}
Output

pdg = 0x010207F merujuk kepada alamat yang terkandung
di dalam pembolehubah penuding pdg
*pdg = 5 merujuk kepada nilai yang terkandung
dalam alamat yang disimpan oleh
pembolehubah penuding pdg
F4104 ALGORITMA & STRUKTUR DATA



18
Aktiviti 2a

1. Apakah yang boleh dijelaskan oleh Penuding? Penuding adalah satu pembolehubah
yang digunakan untuk menunjuk kepada sesuatu pembolehubah yang lain. Ia juga
sejenis data yang hanya menyimpan alamat ingatan, bukan nilai.

2. Apakah kegunaan symbol *? Simbol * dinamakan operator capaian tidak langsung
yang bermaksud nilai yang terkandung dalam alamat


3. Berikan satu pengisytiharan penuding berjenis integer. int *ptr;

4. Apakah perbezaan antara pembolehubah biasa dengan pembolehubah penuding?
Pembolehubah biasa akan menyimpan nilai manakala pembolehubah penuding
akan menyimpan alamat.

5. Jelaskan maksud bagi pengisytiharan berikut:
a) int *y; y merupakan penuding yang boleh menunjuk kepada
pembolehubah berjenis integer
b) float *z; z merupakan penuding yang boleh menunjuk kepada
pembolehubah berjenis float
c) int q ; q adalah pembolehubah berjenis integer
d) int *z = &y; z ialah penuding yang menunjuk kepada pembolehubah
y.



2.4 Hubungkait penuding dengan tatasusunan

Tatasusunan sebenarnya adalah satu set data yang sama jenis dikumpulkan bersama.







Penuding pula adalah sama seperti pembolehubah biasa tetapi akan menyimpan alamat
bukan nilai.
Disebabkan tatasusunan dan penuding pada asasnya adalah pembolehubah, maka
terdapat banyak persamaan di antara kedua-duanya.
Bila satu tatasusunan dideklarasikan, setiap ahli tatasusunan tersebut akan mempunyai
alamat yang berturut-turut.






Satu tatasusunan tanpa nombor di dalam kurungan (juga dikenali sebagai subskrip)
boleh dianggap sebagai penuding kepada data pertama dalam tatasusunan tersebut.
Oleh itu, satu penuding boleh diumpukkan kepada alamat elemen pertama dalam
tatasusunan.
int nilai1;
int nilai2;
int nilai3; int nilai[5] ;
int nilai4;
int nilai5;
int nilai[0] beralamat 01000
int nilai[1] beralamat 01010
int nilai[5] ; int nilai[2] beralamat 01100
int nilai[3] beralamat 01110
int nilai[4] beralamat 10000
F4104 ALGORITMA & STRUKTUR DATA



19
2.5 Menggunakan penuding sebagai hujah fungsi

Satu cara untuk memudahkan proses menghantar banyak pembolehubah dari satu
fungsi ke fungsi yang lain adalah dengan menggunakan tatasusunan tanpa subskrip.
Contoh:-




2.6 Penuding kepada fungsi

Setiap fungsi dalam aturcara C++ mempunyai alamat tertentu dalam ingatan komputer di
mana ia boleh dirujuk kepada penuding.
Ini bermaksud, satu penuding kepada fungsi boleh diwujudkan sama seperti penuding
kepada pembolehubah biasa.
Untuk menggunakan pembolehubah penuding kepada fungsi, pengisytiharan jenis data
pemulangan fungsi perlu dilakukan.
Sebagai tambahan, perlu juga kenalpasti jenis data parameter bagi fungsi tersebut.
Contohnya, satu penuding kepada fungsi yang memulangkan nilai berjenis titik apung
dan menerima dua parameter juga berjenis titik apung diisytiharkan.
float (*ptr)(float, float);
Untuk menunjukkan bahawa satu penuding menunjuk kepada fungsi tertentu, perlu
mengumpukkan pembolehubah penuding fungsi kepada nama fungsi yang hendak
ditunjuk.
ptr = &minimum dimana ptr merupakan pembolehubah penuding kepada
fungsi minimum()












int TambahData(int *, int);
void main()
{ int list[ ] = {1,2,3};
int *ptr;
ptr = list;
cout<<"Nilai dalam senarai adalah " << list[0] << list[1] << ist[2]<<endl ;
cout<<"Hasil tambah kesemua elemen = " << TambahData(ptr,3)<<endl;
}
int TambahData (int *ptr, int mak)
{
int i, jum = 0;
for(i=0; i<mak; i++)
{
jum += ptr[i];
}
return jum;
}
Output
Nilai dalam senarai adalah 1 2 3
Hasil tambah kesemua elemen = 6
F4104 ALGORITMA & STRUKTUR DATA



20
Contoh:-
























Penghantaran parameter fungsi kepada satu fungsi lain juga boleh dilakukan.
Contoh:-





#include <iostream.h>
float minimum(float, float); // Prototaip fungsi
float (*ptr)(float, float); // penuding kepada fungsi

void main()
{
float x1, x2, small;
ptr = &minimum; // umpuk alamat fungsi minimum()
// kpd penuding ptr

cout << "Enter two numbers: ";
cin >> x1 >> x2;
small = (*ptr)(x1, x2); // panggilan fungsi dgn penuding

cout << "\nSmaller of the two is " << small;
}

float minimum(float y1, float y2)
{
if (y1 < y2)
return y1 ;
else
return y2 ;
}
#include<iostream.h>

void main()
{
float minimum(float,float);
float maximum(float, float);
float (*ptr)(float, float);
float x1, x2, answ;
char request;
cout << "\nEnter two numbers: ";
cin >> x1 >> x2;
cout << "\nEnter s for small, b for big: ";
cin >> request;
if (request ==s)
ptr = &minimum;
else
ptr = & maximum;
answ = getAnsw(ptr, x1, x2);
cout << "\nAnswer = " << answ;
}
float minimum(float y1, float y2)
{
if (y1<y2)
return y1 ;
else
return y2 ;
}
float maximum(float y1, float y2)
{
if (y1>y2)
return y1 ;
else
return y2 ;
}
float getAnsw(float (*ptr)(float, float),float y1,float y2)
{
float answer;
answer = (*ptr)(y1, y2);
return answer;
}
F4104 ALGORITMA & STRUKTUR DATA



21
2.7 Menggunakan aritmetik penuding

Aritmetik penuding bermaksud melakukan operasi aritmetik am ke atas satu penuding.
Contoh operasi yang boleh dilakukan ke atas satu penuding adalah operasi tambah dan
tolak






Contoh:-









2.8 Penuding dan Struktur

Penuding juga boleh menunjuk kepada suatu struktur.
Contoh:-

struct tarikh
{
int hari;
int bulan;
int tahun;
};

struct cuti
{
char nama[30];
struct tarikh tkh;
};

struct cuti hariRaya, *ptr;

ptr = &hariRaya;

ptr = 01001
2

ptr + 1 = 01010
2
int *ptr ; ptr + 10 = 01011
2

ptr - 1 = 01000
2


#include<iostream.h>
void main()
{
int *ptr;
int psp[]={1,3,5,7,9,2,4,6,8};
ptr = &psp[1];

cout<<"Nilai *(ptr + 3): "<< *(ptr+3) <<endl;
cout<<"Nilai *(ptr + 1): "<< *(ptr+1) <<endl;
cout<<"Nilai *(ptr - 1): "<< *(ptr-1) <<endl;
cout<<"Nilai *(ptr + 5 - 4): "<< *(ptr+5-4) <<endl;

}
Output :-

Nilai *(ptr + 3): 9
Nilai *(ptr + 1): 5
Nilai *(ptr - 1): 1
Nilai *(ptr + 5 - 4): 5
Pengisytiharan struktur bersarang
Pengisytiharan pembolehubah hariRaya dan penuding ptr
berjenis struct cuti
Ptr merupakan pembolehubah penuding yang menunjuk
kepada hariRaya
F4104 ALGORITMA & STRUKTUR DATA



22

Gambaran lokasi ingatan Tatatanda penuding kepada struktur
ptr hariRaya











nama
tkh.hari
tkh.bulan
tkh.tahun
Rujukan Penerangan
ptr
Penuding kepada hariRaya
*ptr
Adalah struktur hariRaya
(*ptr).nama
Setara dgn hariRaya.nama
(*ptr).tkh.hari
Setara dgn hariRaya.tkh.hari

Anda mungkin juga menyukai