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;
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
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; };
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