Titik Penunjuk Dekat, Jauh, dan Besar di atas C
Helo, pemrogram yang baru mula! Hari ini, kita akan melakukan perjalanan yang menarik ke dunia penunjuk di atas C. Jangan khawatir jika anda belum pernah menulis satu baris kode sebelumnya - saya akan menjadi pemandu anda melalui petualangan ini, sama seperti yang saya lakukan untuk pelbagai pelajar selama tahun penyampingan saya. Jadi, mari kita melompat!
Mengenali Penunjuk
Sebelum kita mendalamkan butir-butir penunjuk dekat, jauh, dan besar, mari kita mulakan dengan asas. Bayangkan penunjuk sebagai rakit penyandang di atas memori komputer anda, menunjuk tempat data khusus disimpan. Sama seperti cara anda memberi arah ke kedai kopi kesukaan anda, penunjuk memberikan arah kepada data di atas memori komputer anda.
Berikut adalah contoh yang ringkas untuk menggambar konsep ini:
int number = 42;
int *ptr = &number;
Dalam kod ini, ptr
adalah penunjuk yang menyimpan alamat memori bagi number
. Ia seperti untuk mengatakan, "Hei, nilai 42 disimpan di atas lokasi khusus di atas memori."
Penunjuk Dekat
Sekarang, mari kita bercakap tentang penunjuk dekat. Pada hati anda, bayangkan mereka sebagai pahlawan tempatan di atas dunia penunjuk. Mereka efisien dan pantas, tetapi mereka mempunyai julat yang terbatas - biasanya di atas satu segmen memori 64KB.
Berikut adalah contoh penunjuk dekat di atas tindakan:
int near *nearPtr;
int value = 10;
nearPtr = &value;
Dalam kes ini, nearPtr
adalah penunjuk dekat yang boleh mengakses data di atas segmen sendiri. Ia sempurna bagi masa anda bekerja dengan data yang dekat di atas memori.
Penunjuk Jauh
Bergerak ke penunjuk jauh - mereka adalah pelari jarak jauh di atas dunia penunjuk. Mereka boleh mengakses data di atas segmen semasa, yang mengandungi kedua segmen dan ofset.
Mari kita lihat penunjuk jauh di atas penggunaan:
int far *farPtr;
int value = 20;
farPtr = (int far *)&value;
Di sini, farPtr
boleh mencapai di atas segmen semasa untuk mengakses data. Ia seperti memiliki peta yang boleh membimbing anda ke mana-mana bahagian di atas bandar, bukan hanya kampung anda.
Penunjuk Besar
Sekarang, untuk juara berat kelas - penunjuk besar. Penunjuk ini adalah superhero bagi akses memori, kapable untuk mengesan keseluruhan ruang memori sistem.
Berikut adalah cara anda mungkin menggunakan penunjuk besar:
int huge *hugePtr;
int value = 30;
hugePtr = (int huge *)&value;
hugePtr
boleh mengakses mana-mana lokasi memori di atas keseluruhan sistem. Ia seperti memiliki penyambung yang boleh membawa anda ke mana-mana di atas dunia!
Penunjuk untuk Dihafal
Mari penyusun butir utama tentang jenis penunjuk ini di atas rakam yang berguna:
Jenis Penunjuk | Julat Memori | Kasus Penggunaan |
---|---|---|
Penunjuk Dekat | Dalam 64KB segmen | Efisien bagi akses data tempatan |
Penunjuk Jauh | Di atas segmen semasa | Mengakses data di atas segmen berbeza |
Penunjuk Besar | Keseluruhan ruang memori | Mengesan struktur data yang sangat besar |
Ingat, pilihan jenis penunjuk bergantung kepada keperluan anda khusus dan model memori yang anda gunakan.
Contoh Praktikal
Sekarang kita telah menutupi asas, mari lihat beberapa contoh praktikal untuk memastikan pemahaman kita.
Contoh 1: Menggunakan Penunjuk Dekat
void near *allocateNear(size_t size) {
return malloc(size);
}
int main() {
int near *numbers = (int near *)allocateNear(5 * sizeof(int));
for (int i = 0; i < 5; i++) {
numbers[i] = i * 10;
}
// Menggunakan memori yang dihasilkan
for (int i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
free(numbers);
return 0;
}
Dalam contoh ini, kita menggunakan penunjuk dekat untuk menghasilkan dan mengakses rak turus kecil. Ia efisien bagi struktur data kecil dan tempatan.
Contoh 2: Penunjuk Jauh untuk Akses Cross-Segment
void far *allocateFar(size_t size) {
return farmalloc(size);
}
int main() {
int far *bigArray = (int far *)allocateFar(1000 * sizeof(int));
for (int i = 0; i < 1000; i++) {
bigArray[i] = i;
}
// Mengakses data dari segmen berbeza
printf("Elemen 500: %d\n", bigArray[500]);
farfree(bigArray);
return 0;
}
Di sini, kita menggunakan penunjuk jauh untuk menghasilkan dan mengakses rak yang lebih besar yang mungkin melintasi segmen memori.
Contoh 3: Penunjuk Besar untuk Struktur Data Besar
void huge *allocateHuge(size_t size) {
return halloc(size, 1);
}
int main() {
long huge *hugeArray = (long huge *)allocateHuge(1000000 * sizeof(long));
for (long i = 0; i < 1000000; i++) {
hugeArray[i] = i * i;
}
// Mengakses struktur data yang sangat besar
printf("Elemen 999999: %ld\n", hugeArray[999999]);
hfree(hugeArray);
return 0;
}
Dalam contoh terakhir ini, kita menggunakan penunjuk besar untuk bekerja dengan struktur data yang sangat besar yang memerlukan pengesan di atas limits penunjuk dekat atau jauh.
Kesimpulan
Dan itu adalah untuk masa ini, rakyat! Kita telah melakukan perjalanan melalui wilayah penunjuk dekat, jauh, dan besar di atas C. Ingat, setiap jenis penunjuk memiliki kekuatan dan kasus penggunaan mereka sendiri. Penunjuk dekat adalah pilihan anda untuk akses tempatan yang efisien, penunjuk jauh membantu anda mencapai di atas segmen memori, dan penunjuk besar adalah alat anda untuk menghadapi struktur data yang besar.
Sebagai anda teruskan perjalanan pemrograman anda, anda akan mendapati bahawa pemahaman konsep ini akan memberikan anda pengawalan dan kecekapan yang lebih dalam pengurusan memori. Ia seperti memiliki kunci yang boleh membuka berbagai bahagian di atas raket penyandang komputer anda.
Teruskan untuk berlatih, tetap khuiruses, dan sebelum anda tahu, anda akan menunjuk jalan untuk kesuksesan pemrograman anda! Happy coding!
Credits: Image by storyset