Dalam ijazah teknologi, terdapat konsep dan subjek yang secara amnya menakutkan pelajar, beberapa contoh utama adalah subjek yang berkaitan dengan Pengaturcaraan Berorientasikan Objek dan Kalkulus, contoh lain adalah beberapa tanggapan yang lebih asas abstrak. fungsi seperti penunjuk, terutamanya dalam C, subjek artikel ini.
Berbeza dengan kami, komputer tidak mengetahui maklumat tertentu dengan "label" atau "nama", tetapi dengan alamat tempat data ini terletak dalam ingatan. Kita boleh menganggap memori sebagai satu set "sel" yang mengandungi beberapa bit yang menyimpan 0 atau 1 dan setiap sel dikaitkan dengan alamat tertentu di mana ia menyimpan beberapa maklumat supaya program yang dilaksanakan oleh mesin boleh mengakses data ini dan memanipulasi ia.
Mengingati bahawa untuk program boleh menggunakan data, ia perlu mengetahui alamatnya dalam ingatan, kita boleh memahami konsep penunjuk. Penunjuk ialah pembolehubah yang "menunjukkan" kepada beberapa data lain, ia seolah-olah ruang dalam ingatan yang bertujuan untuk menyimpan alamat pembolehubah atau maklumat lain supaya ia boleh dimanipulasi.
Tetapi kini timbul persoalan, apakah kegunaan penunjuk? Penunjuk membenarkan beberapa operasi yang lebih kompleks yang melibatkan memori, seperti peruntukan dinamik dengan Malloc atau penciptaan struktur data yang lebih kompleks, dsb. Tambahan pula, terdapat beberapa butiran yang tidak begitu mudah diperhatikan oleh pelajar pada mulanya, seperti fakta bahawa nama vektor adalah penunjuk. Betul, vektor tidak lebih daripada "penunjuk tetap" yang menunjuk ke kedudukan tertentu dalam ingatan dan kami menggunakan indeks untuk memanipulasi mengikut keperluan.
Penggunaan lain ialah memanipulasi data melalui rujukan, sebagai contoh: menghantar tatasusunan sebagai parameter kepada fungsi lain, membenarkan tatasusunan asal diubah suai dan bukannya nilai atau objek yang diluluskan hanya salinan, sesuatu yang, contohnya, berlaku dalam Javascript di mana tidak ada konsep penunjuk (sekurang-kurangnya tidak secara eksplisit), contohnya:
#include <stdio.h> int vet [5] ={10,20,3,4}; void somadez(int * ref){ for(int i=0;i<5;i++) ref[i]+=10; } int main () { somadez(vet); for(int i=0;i<5;i++) printf("%i\n",vet[i]); return 0; } saída: 20 30 13 14 note que quem foi alterado foi o vetor original
Satu lagi penggunaan penunjuk yang tidak begitu jelas, kali ini untuk bahasa berorientasikan objek, di mana kita boleh, sebagai contoh, mencipta objek dinamik dan memudahkan kerja dengan warisan dan polimorfisme.
Kami mempunyai contoh ini di bawah dengan C++:
#include <iostream> using namespace std; class Animal{ public: virtual void som(); }; class Cachorro : public Animal{ public: void som(){ cout << "auau"; } }; int main () { Animal * ClasseBase; Cachorro ClasseFilha; ClasseBase = &ClasseFilha; ClasseBase->som(); //neste caso podemos usar o ponteiro para acessar métodos e atributos de uma classe derivada. return 0; }
Atas ialah kandungan terperinci Memahami Penunjuk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!