mdpai
About this author:
System Engineer (Texas Instruments France), Masters in Electronics , Embedded System Engineering,
Contact:
My Articles:
Boot LiveCD ISO berlainan dari USB pendrive dengan Grub2
Anda pasti berminat untuk mengikuti artikel ini jika anda:
1) Mahu mempunyai lebih daripada satu ISO dalam satu USB pendrive.
2) Anda malas untuk konfigurasi USB pendrive untuk menjadikannya bootable dengan LiveUSB creator.
3) Anda mahu boleh copy ISO dari PC anda terus ke dalam USB pendrive.
Langkah 1:
Tukar USBlabel kepada folder USB anda. Tukar /dev/sdx kepada device name USB anda. Langkah ini akan melakukan instalasi grub2 ke dalam MBR USB pendrive anda.
sudo grub-install --root-directory=/media/USBLabel /dev/sdx |
Langkah 2:
- Buat fail konfigurasi grub.cfg di dalam /media/USBLabel/boot/grub/
Langkah 3:
- Letak file ISO anda di dalam /media/USBLabel/boot/isos/
menuentry "Ubuntu 11.10 Oneiric" { set isofile="/boot/isos/ubuntu-11.10-desktop-i386.iso" loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash noprompt -- initrd (loop)/casper/initrd.lz } |
- Ulang langkah 3 bergantung kepada berapa banyak ISO yang anda mahu diletakkan di dalam USB pendrive.
Langkah 4:
- Dah takde langkah dah, tinggal boot je
Bina repositori tempatan (LAN) dengan apt-cacher
Artikel ini bersempena dengan Ubuntu Global Jam yang berlangsung dari 2-4 Mac 2012. Pihak loco Malaysia telah memilih beberapa tema yang difikirkan sesuai untuk peserta-peserta dari loco Malaysia seperti upgrade, dokumentasi, packaging, dan juga terjemahan. Untuk tema upgrade, setiap peserta akan melakukan upgrade Ubuntu masing-masing ke versi terbaru Ubuntu iaitu Ubuntu 12.04 Precise Pangolin.
Untuk tema ini, satu masalah yang difirkan akan timbul adalah berkenaan dengan kelajuan muat-turun pakej naik-taraf dan juga saiz pakej-pakej yang akan dimuat-turun. Jadi, salah satu idea yang dibincangkan adalah menggunakan DebMirror. Dengan menggunakan debmirror kita akan memuat-turun keseluruhan repo Ubuntu yang mungkin saiznya mencecah ratusan GB. Jadi idea ini telah diabaikan dan kami telah mengambil keputusan untuk menggunakan apt-cacher.
Idea di sebalik apt-cacher adalah satu mesin akan menjadi cacher dan mesin-mesin lain akan melalui mesin cacher ini untuk melakukan naik-taraf. Sebagai contoh jika di dalam LAN anda mempunyai 4 mesin, PC1, PC2, PC3 dan PC4 dan anda menjadikan PC1 sebagai cacher. Jika PC2, PC3 dan PC4 melakukan naik-taraf, ia akan meminta pakej-pakej yang diperlukan dari PC1. Untuk PC1, jika pakej yang diminta tidak berada dalam cache, ia akan memuat-turun pakej tersebut dan memasukkannya ke dalam ruang cache. Jadi jika ada mesin lain yang meminta pakej yang sama, PC1 tidak perlu lagi memuat-turun pakej tersebut dan boleh terus membekalkan pakej tersebut dari ruang cache.
KONFIGURASI CACHER
1) Instalasi apt-cacher
sudo apt-get install apt-cacher |
2) Konfigurasi apt-cacher (tidak wajib)
sudo gedit /etc/apt-cacher/apt-cacher.conf & |
3) Menjalankan apt-cacher setiap boot sistem.
sudo gedit /etc/default/apt-cacher & |
Tukar AUTOSTART kepada 1.
4) Menjalankan apt-cacher
sudo /etc/init.d/apt-cacher restart |
SIAP!
KONFIGURASI CLIENT
1) Backup sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.orig |
2) Modifikasi sources.list untuk mengambil pakej dari cacher.
sudo gedit /etc/apt/sources.list & |
Masukkan nombor IP cacher ke dalam link repo. Seperti contoh di bawah.
deb http://archive.ubuntu.com/ubuntu oneiric main restricted deb-src http://archive.ubuntu.com/ubuntu oneiric main restricted |
Ditukar menjadi
deb http://192.168.1.13:3142/archive.ubuntu.com/ubuntu oneiric main restricted deb-src http://192.168.1.13:3142/archive.ubuntu.com/ubuntu oneiric main restricted |
Buat untuk semua repo.
3) Update
sudo apt-get update |
Contoh output:
Get:1 http://192.168.1.13 precise Release.gpg [198 B] Get:2 http://192.168.1.13 precise-updates Release.gpg [198 B] Get:3 http://192.168.1.13 precise-backports Release.gpg [198 B] Get:4 http://192.168.1.13 precise-security Release.gpg [198 B] Get:5 http://192.168.1.13 precise Release.gpg [72 B] Get:6 http://192.168.1.13 precise Release [49.6 kB] Get:7 http://192.168.1.13 precise-updates Release [28.9 kB] Get:8 http://192.168.1.13 precise-backports Release [28.9 kB] ... ... Get:73 http://192.168.1.13 precise-security/main Translation-en [14 B] Get:74 http://192.168.1.13 precise-security/multiverse Translation-en [14 B] Get:75 http://192.168.1.13 precise-security/restricted Translation-en [14 B] Get:76 http://192.168.1.13 precise-security/universe Translation-en [14 B] Ign http://192.168.1.13 precise/main Translation-en_US Ign http://192.168.1.13 precise/main Translation-en Fetched 16.7 MB in 1min 46s (158 kB/s) Reading package lists... Done |
Selamat mencuba!
[Ubuntu] Kompil kernel menggunakan git dari 3.3-rc4 ke 3.3-rc5
Untuk artikel ini, kita akan mengkompil kernel mainline 3.3-rc5 dari Linus dan saya beranggapan yang anda sudah pun mengkompil kernel 3.3-rc4 (3.3-rc4).
1) Masuk pada direktori kernel anda.
cd linux |
2) Update kernel tree anda
git pull |
remote: Counting objects: 1755, done. remote: Compressing objects: 100% (462/462), done. remote: Total 1229 (delta 941), reused 1023 (delta 759) Receiving objects: 100% (1229/1229), 490.32 KiB | 275 KiB/s, done. Resolving deltas: 100% (941/941), completed with 288 local objects. From git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux b01543d..3c761ea master -> origin/master From git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux * [new tag] v3.3-rc5 -> v3.3-rc5 Updating b01543d..3c761ea Fast-forward |
3) Langkah ini untuk mengemas kini fail konfigurasi kernel.
yes '' | make oldconfig |
4) [tidak wajib] Anda kemudian boleh menukar konfigurasi kernel ini dengan menggunakan arahan di bawah.
make menuconfig |
5) Membersihkan direktori kernel
make-kpkg clean |
6) Proses kompilasi kernel. Bergantung kepada jumlah core processor anda, ia akan mengambil masa yang berbeza.
CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers |
7)
cd .. |
8 ) Instalasi kernel
sudo dpkg -i linux-image-3.3.0-rc5-custom-fairuz_3.3.0-rc5-custom-fairuz-10.00.Custom_i386.deb sudo dpkg -i linux-headers-3.3.0-rc5-custom-fairuz_3.3.0-rc5-custom-fairuz-10.00.Custom_i386.deb |
fairuz@themachine:~/build$ sudo dpkg -i linux-image-3.3.0-rc5-custom-fairuz_3.3.0-rc5-custom-fairuz-10.00.Custom_i386.deb [sudo] password for fairuz: Selecting previously deselected package linux-image-3.3.0-rc5-custom-fairuz. (Reading database ... 352714 files and directories currently installed.) Unpacking linux-image-3.3.0-rc5-custom-fairuz (from linux-image-3.3.0-rc5-custom-fairuz_3.3.0-rc5-custom-fairuz-10.00.Custom_i386.deb) ... Examining /etc/kernel/preinst.d/ Done. Setting up linux-image-3.3.0-rc5-custom-fairuz (3.3.0-rc5-custom-fairuz-10.00.Custom) ... Running depmod. Examining /etc/kernel/postinst.d. run-parts: executing /etc/kernel/postinst.d/dkms 3.3.0-rc5-custom-fairuz /boot/vmlinuz-3.3.0-rc5-custom-fairuz run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.3.0-rc5-custom-fairuz /boot/vmlinuz-3.3.0-rc5-custom-fairuz update-initramfs: Generating /boot/initrd.img-3.3.0-rc5-custom-fairuz run-parts: executing /etc/kernel/postinst.d/pm-utils 3.3.0-rc5-custom-fairuz /boot/vmlinuz-3.3.0-rc5-custom-fairuz run-parts: executing /etc/kernel/postinst.d/update-notifier 3.3.0-rc5-custom-fairuz /boot/vmlinuz-3.3.0-rc5-custom-fairuz run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.3.0-rc5-custom-fairuz /boot/vmlinuz-3.3.0-rc5-custom-fairuz Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.3.0-rc5-custom-fairuz Found initrd image: /boot/initrd.img-3.3.0-rc5-custom-fairuz Found linux image: /boot/vmlinuz-3.3.0-rc4-custom-fairuz+ Found initrd image: /boot/initrd.img-3.3.0-rc4-custom-fairuz+ Found linux image: /boot/vmlinuz-3.3.0-rc3-custom+ Found initrd image: /boot/initrd.img-3.3.0-rc3-custom+ Found linux image: /boot/vmlinuz-3.3.0-rc2-custom Found initrd image: /boot/initrd.img-3.3.0-rc2-custom Found linux image: /boot/vmlinuz-3.0.0-16-generic-pae Found initrd image: /boot/initrd.img-3.0.0-16-generic-pae Found linux image: /boot/vmlinuz-3.0.0-16-generic Found initrd image: /boot/initrd.img-3.0.0-16-generic Found memtest86+ image: /boot/memtest86+.bin Found Windows 7 (loader) on /dev/sda1 Found Windows 7 (loader) on /dev/sdc1 done |
fairuz@themachine:~/build$ sudo dpkg -i linux-headers-3.3.0-rc5-custom-fairuz_3.3.0-rc5-custom-fairuz-10.00.Custom_i386.deb Selecting previously deselected package linux-headers-3.3.0-rc5-custom-fairuz. (Reading database ... 356928 files and directories currently installed.) Unpacking linux-headers-3.3.0-rc5-custom-fairuz (from linux-headers-3.3.0-rc5-custom-fairuz_3.3.0-rc5-custom-fairuz-10.00.Custom_i386.deb) ... Setting up linux-headers-3.3.0-rc5-custom-fairuz (3.3.0-rc5-custom-fairuz-10.00.Custom) ... Examining /etc/kernel/header_postinst.d. run-parts: executing /etc/kernel/header_postinst.d/dkms 3.3.0-rc5-custom-fairuz /boot/vmlinuz-3.3.0-rc5-custom-fairuz |
9) Reboot.
sudo reboot |
Hasilnya:
fairuz@themachine:~/build$ uname -a Linux themachine 3.3.0-rc5-custom-fairuz #2 SMP Sun Feb 26 21:48:18 CET 2012 i686 i686 i386 GNU/Linux |
[Ubuntu] Kompil kernel menggunakan git dari 3.3-rc3 ke 3.3-rc4
Untuk artikel ini, kita akan mengkompil kernel mainline 3.3-rc4 dari Linus dan saya beranggapan yang anda sudah pun mengkompil kernel 3.3-rc3.
1) Masuk pada direktori kernel anda.
cd linux |
2) Update kernel tree anda
git pull |
3) Langkah ini untuk mengemas kini fail konfigurasi kernel.
yes '' | make oldconfig |
4) [tidak wajib] Anda kemudian boleh menukar konfigurasi kernel ini dengan menggunakan arahan di bawah.
make menuconfig |
5) Membersihkan direktori kernel
make-kpkg clean |
6) Proses kompil kernel. Bergantung kepada jumlah core processor anda, ia akan mengambil masa yang berlainan.
CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers |
7)
cd .. |
8 ) Instalasi kernel
sudo dpkg -i linux-image-3.3.0-rc4-custom-fairuz+_3.3.0-rc4-custom-fairuz+-10.00.Custom_i386.deb sudo dpkg -i linux-headers-3.3.0-rc4-custom-fairuz+_3.3.0-rc4-custom-fairuz+-10.00.Custom_i386.deb |
9) Reboot.
sudo reboot |
Hasilnya:
fairuz@themachine:~/build$ uname -a Linux themachine 3.3.0-rc4-custom-fairuz+ #1 SMP Sun Feb 19 19:35:27 CET 2012 i686 i686 i386 GNU/Linux |
[Ubuntu] Kompil mainline kernel
Untuk artikel ini, kita akan mengkompil kernel mainline dari Linus untuk digunakan di dalam Ubuntu 11.10. Kita akan cuba untuk mengkompil kernel 3.3-rc3 untuk digunakan di dalam Ubuntu 11.10.
Keperluan:
sudo apt-get install git-core kernel-package fakeroot build-essential ncurses-dev |
Kita memerlukan beberapa package untuk memastikan proses kompil berjalan dengan lancar.
1) Masuk direktori yang mana anda kita akan melakukan proses kompil. Saya membuat satu direktori yang saya namakan “build”.
mkdir -p build cd build |
2) Klon kernel mainline git tree. Bergantung kepada kelajuan internet anda, langkah ini mungkin mengambil sedikit masa memandangkan hampir 600MB perlu dimuat turun.
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git |
3) Masuk direktori linux.
cd linux |
4) Untuk memastikan tiada masalah yang mungkin timbul, kita akan menggunakan konfigurasi kernel Ubuntu (yang sedang anda gunakan) untuk kernel baru ini.
cp /boot/config-`uname -r` .config |
5) Langkah ini untuk mengemas kini fail konfigurasi kernel.
yes '' | make oldconfig |
6) [tidak wajib] Anda kemudian boleh menukar konfigurasi kernel ini dengan menggunakan arahan di bawah.
make menuconfig |
7) Langkah ini untuk mengelak error pada make-dpkg
sed -rie 's/echo "\+"/#echo "\+"/' scripts/setlocalversion |
8 ) Membersihkan direktori kernel
make-kpkg clean |
9) Proses kompil kernel. Bergantung kepada jumlah core processor anda, ia akan mengambil masa yang berlainan.
CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers |
10)
cd .. |
11) Instalasi kernel
sudo dpkg -i linux-image-3.3.0-rc3-custom-fairuz+_3.3.0-rc3-custom-fairuz+-10.00.Custom_i386.deb sudo dpkg -i linux-headers-3.3.0-rc3-custom-fairuz+_3.3.0-rc3-custom-fairuz+-10.00.Custom_i386.deb |
12) Reboot.
sudo reboot |
Hasilnya:
fairuz@themachine:~/build$ uname -a Linux themachine 3.3.0-rc3-custom-fairuz+ #1 SMP Sun Feb 19 19:35:27 CET 2012 i686 i686 i386 GNU/Linux |
ZTE MF627 USB modem driver untuk Win 7
Firmware yang dibekalkan dengan modem ZTE MF627 (anda boleh rujuk nombor ini di badan modem anda) untuk Celcom broadband hanya boleh diinstall di Windows XP atau Vista. Jika anda menggunakan Win 7, masalah yang mungkin timbul adalah firmware tersebut tidak akan mengenalpasti simcard anda.
Untuk mengatasi masalah ini, anda perlu menggunakan driver yang lebih terkini (anda masih boleh menggunakan firmware yang sama).
http://mymobile.three.co.uk:8080/downloads/MF627_Windows_7DriverSetup.exe
Jika anda mendapat error 123 ketika proses sambungan (connect), pastikan dalam Setting bahawa anda mempunyai sekurang-kurangnya satu fail konfigurasi. Hanya isi ruangan nombor panggilan. Anda boleh gunakan *99***2# .
kredit RM100 Percuma untuk akaun Adwords
Untuk mendapatkan kredit percuma bernilai RM100 untuk pemasaran produk anda menggunakan Google Adwords, sila daftar dengan menggunakan link berikut.
https://services.google.com/fb/forms/admye100/?utm_source=RMKT
Ianya hanya sah untuk akaun yang berumur kurang dari 14 hari.
P/s : Jika sesiapa yang ada link untuk $100 Adwords, sila tinggalkan link di ruangan komen. terima kasih.
Linked list dalam C
Salah satu jenis struktur data adalah linked list. Dalam bahasa melayunya, linked list adalah data yang bersambungan antara satu sama lain. Setiap elemen linked list dipanggil node. Manakala setiap node terbahagi kepada dua bahagian iaitu bahagian data yang akan menyimpan data dan bahagian sambungan (link) yang berfungsi sebagai penyambung elemen-elemen di dalam linked list ini.
Di dalam bahagian sambungan, biasanya ia terdiri dari hanya satu pembolehubah pointer yang akan merujuk kepada address (lokasi) node seterusnya. Linked list ini dipanggil single-linked linked list. Untuk double-linked linked list, terdapat dua pointer, di mana satu merujuk kepada address node seterusnya dan satu lagi merujuk kepada address node sebelumnya. Rujuk artikel ini untuk pemahaman berkenaan pointer.
Node biasanya adalah struktur C untuk menyimpan lebih daripada satu jenis pemboleh ubah (rujuk artikel ini). Salah satu contoh mudah sebuah node adalah:
struct tnode { int data; struct tnode *next; }; |

Di mana data merujuk kepada bahagian data dan next merujuk kepada bahagian link. Jadi dengan ini kita boleh bayangkan yang kita membuat satu linked list dengan 3 node seperti contoh di bawah.
#include <stdio.h> #include <stdlib.h> struct tnode { int data; struct tnode *next; }; int main(int argc, char *argv[]) { struct tnode *node = (struct tnode *)malloc(sizeof(struct tnode)); // menyambung node node->data = 100; node->next = (struct tnode *)malloc(sizeof(struct tnode)); printf("Data node1 %d \n", node->data); printf("Link node1 %p \n", node->next); printf("Lokasi node1 %p \n\n", node); node->next->data = 200; node->next->next = (struct tnode *)malloc(sizeof(struct tnode)); printf("Data node2 %d \n", node->next->data); printf("Link node2 %p \n", node->next->next); printf("Lokasi node2 %p \n\n", node->next); node->next->next->data = 300; node->next->next->next = NULL; printf("Data node3 %d \n", node->next->next->data); printf("Link node3 %p \n", node->next->next->next); printf("Lokasi node3 %p \n\n", node->next->next); system("PAUSE"); return 0; } |
Seperti yang boleh digambarkan seperti di bawah.

Berikut adalah hasil output kod di atas setelah dijalankan menggunakan Dev-C++.

Jadi setelah melihat bagaimana linked list berfungsi, mari kita lihat bagaimana membina satu program linked list yang lengkap. Dalam program linked list, saya membayangkan beberapa fungsi yang boleh membantu kita memanipulasi linked list yang dihasilkan.
Membina node baru
Fungsi ini bertujuan untuk memperuntukkan (allocate) ruang memori untuk node baru dan memasukkan data ke dalamnya.
struct tnode * createnode(int data){ struct tnode * node; node = (struct tnode *)malloc(sizeof(struct tnode)); node->next = NULL; node->data = data; return node; } |
Menambah node
Fungsi ini akan menggunakan fungsi createnode di atas dan kemudiannya memasukkan node tersebut ke dalam linked list yang sedia ada di posisi yang diberi.
void tambahnode(int data, int pos) { int i; struct tnode *temp, *prev, *current; current = head; if(pos > (length()+1) || pos <= 0){ printf("Posisi tidak sah.\n "); } else { if (pos == 1){ temp = createnode(data); temp->next = head; head = temp; } else{ for(i=1;i<pos;i++){ prev = current; current = current->next; } temp = createnode(data); prev->next = temp; temp->next = current; } } } |
Memaparkan data node
Fungsi ini digunakan untuk memaparkan kesemua data yang terkandung di dalam node-node yang ada.
void paparnode(void){ struct tnode * current = head; while(current != NULL) { printf("Data node %d \n", current->data); printf("Link node %p \n", current->next); printf("Lokasi node %p \n\n", current); current = current->next; } } |
Mengira jumlah node
Fungsi ini bertujuan untuk memberikan jumlah node yang berada di dalam linked list.
int length(void) { struct tnode* current = head; int count = 0; while (current != NULL) { count++; current = current->next; } return count; } |
Membuang node
Fungsi ini bertujuan untuk membuang node di posisi yang ditetapkan.

void deletenode(int pos){ struct tnode * current = head; struct tnode * prev; int i; if(pos > (length()) || pos <= 0){ printf("Posisi tidak sah.\n"); } else { if(pos == 1){ head = current->next; free(current); } else{ for(i=1; i<pos; i++) { prev = current; current = current->next; } prev->next = current->next; free(current); } } } |
Jika kita gabungkan kesemua fungsi-fungsi di atas, kita sudahpun mempunyai satu program linked list yang lengkap.
#include <stdio.h> #include <stdlib.h> struct tnode { int data; struct tnode *next; } *head; struct tnode * createnode(int data){ struct tnode * node; node = (struct tnode *)malloc(sizeof(struct tnode)); node->next = NULL; node->data = data; return node; } void tambahnode(int data, int pos) { int i; struct tnode *temp, *prev, *current; current = head; if(pos > (length()+1) || pos <= 0){ printf("Posisi tidak sah.\n "); } else { if (pos == 1){ temp = createnode(data); temp->next = head; head = temp; } else{ for(i=1;i<pos;i++){ prev = current; current = current->next; } temp = createnode(data); prev->next = temp; temp->next = current; } } } void paparnode(void){ struct tnode * current = head; printf("*****************************\n"); while(current != NULL) { printf("Data node %d \n", current->data); printf("Link node %p \n", current->next); printf("Lokasi node %p \n\n", current); current = current->next; } } int length(void) { struct tnode* current = head; int count = 0; while (current != NULL) { count++; current = current->next; } return count; } void deletenode(int pos){ struct tnode * current = head; struct tnode * prev; int i; if(pos > (length()) || pos <= 0){ printf("Posisi tidak sah.\n"); } else { if(pos == 1){ head = current->next; free(current); } else{ for(i=1; i<pos; i++) { prev = current; current = current->next; } prev->next = current->next; free(current); } } } int main(int argc, char *argv[]) { head = NULL; tambahnode(100, 1); tambahnode(200, 1); tambahnode(300, 1); tambahnode(400, length() + 1); paparnode(); deletenode(3); paparnode(); system("PAUSE"); return 0; } |
Struktur Data (data structure)
Dalam dunia sains komputer, struktur data adalah satu cara untuk menyimpan dan mengurus data supaya ianya boleh digunakan dengan efisien. Terdapat pelbagai struktur data yang biasa digunakan seperti linked-list, hash tables, tree dan queue.
Untuk sesebuah struktur data, kita memerlukan beberapa fungsi seperti fungsi masuk, fungsi padam yang akan membenarkan kita untuk membina dan memanipulasi struktur data tersebut.
Pointer dalam C
Terdapat satu pembolehubah khas yang dinamakan pointer yang digunakan secara meluas dalam C. Pelajar yang mempelajari C biasanya mempunyai masalah dengan pointer kerana dikatakan susah difahami. Saya akan cuba mengatasi masalah ini dengan menggunakan pendekatan yang berlainan dengan menggunakan gambarajah.
Jika kita lihat analogi pembolehubah di artikel ini, ia juga boleh diaplikasikan di sini tapi bezanya, pointer hanya boleh menyimpan lokasi pembolehubah lain.

Untuk lebih memahami pointer, kita boleh lihat contoh di bawah di mana kita mempunyai satu pembolehubah dan satu pointer. Kita akan menganggap lokasi memori untuk pembolehubah harga adalah 0×3333 manakala lokasi pointer ptr adalah 0×1234.
int harga = 500; int * ptr = &harga; |

int harga = 500 akan menghasilkan kotak bernama harga yang mengandungi angka 500. Manakala int * ptr akan menghasilkan pointer yang mengandungi lokasi pembolehubah harga (&harga merujuk kepada lokasi harga). Jika lokasi harga adalah 0×3333, jadi 0×3333 lah yang akan terkandung di dalam kotak ptr seperti gambarajah di atas.
Memandangkan kotak ptr mengandungi lokasi kotak harga, bagaimana jika kita mahu menukar nilai harga dengan menggunakan pembolehubah pointer ptr? Jawapannya adalah dengan menggunakan *ptr. *ptr merujuk kepada nilai di dalam kotak yang dirujuk oleh kotak ptr. Jadi dalam kes di atas, *ptr merujuk kepada nilai 500 di dalam kotak harga.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int harga = 500; int * ptr = &harga; printf("Harga %d \n", harga); printf("Harga %d \n", *ptr); harga = 600; printf("Harga %d \n", harga); printf("Harga %d \n", *ptr); *ptr = 700; printf("Harga %d \n", harga); printf("Harga %d \n", *ptr); system("PAUSE"); return 0; } |
Harga 500 Harga 500 Harga 600 Harga 600 Harga 700 Harga 700 |
Kita boleh membayangkan situasi yang sedikit kompleks seperti di bawah:
int a = 100; int b = 200; int *c = &a; int **d = &c; |
Yang boleh digambarkan seperti berikut:

di mana nilai a adalah 100, nilai b adalah 200, nilai c adalah lokasi a iaitu 0×0000 dan nilai d adalah lokasi c iaitu 0×0008. Seperti yang diterangkan di atas, *c bermaksud nilai di dalam kotak a iaitu 100 dan *d bermaksud nilai di dalam kotak c iaitu 0×0000. Jadi bolehkah kita akses nilai di dalam kotak a dengan menggunakan pointer d? Jawapannya boleh dengan bantuan **d.
- Boot LiveCD ISO berlainan dari USB pendrive dengan Grub2
- Bina repositori tempatan (LAN) dengan apt-cacher
- [Ubuntu] Kompil kernel menggunakan git dari 3.3-rc4 ke 3.3-rc5
- [Ubuntu] Kompil kernel menggunakan git dari 3.3-rc3 ke 3.3-rc4
- [Ubuntu] Kompil mainline kernel
- ZTE MF627 USB modem driver untuk Win 7
- kredit RM100 Percuma untuk akaun Adwords
- Linked list dalam C
- Struktur Data (data structure)
- Pointer dalam C
- mnaaimf : en, Kalau kite tambah field jawatan bagi setiap pekerja lebih dari ...
- phohan : saya mau tanya,apa include contoh diatas bisa diterapkan ehm,saya ceri ...
- tajudin : bagus mas cuman saya ada masalah dengan program sya yang berhubungan d ...
- P0L5K4H4CKR3W : salam..tumpang tanya bro.. simbol $ tu untuk apa,apa fungsinya? ...
- ultraman : adoi.. camne nak wat greet org yang da login kat page kite ek? contoh ...
- mdpai : @akmal : saya kat kota bharu :D @hana : cadangan projek tu banyak kal ...
- mdpai : @Wanrushdi : Boleh try cek data yang dikembalikan oleh mysql_query. An ...
- mdpai : security salt ni digunakan untuk tujuan menambahbaik security dalam se ...
- Wanrushdi : minta maaf, coding yg tlh di attach tu... tak tepat..... jd minta tlg ...
- Wanrushdi : <?php include 'connect.php'; $no = 1; $kodsek= $_GET[& ...

