Mengapa master C Dennis Ritchie memperkenalkan pointer dalam C? Dan mengapa bahasa pemrograman lain seperti VB.NET atau Java atau C # menghilangkannya? Saya telah menemukan beberapa poin di Google, dan saya ingin mendengarkan komentar Anda juga. Mengapa mereka menghilangkan konsep pointer dalam bahasa modern?
Orang mengatakan C adalah bahasa dasar dan petunjuk adalah konsep yang membuat C kuat dan luar biasa dan membuat C masih bersaing dengan bahasa yang lebih modern. Lalu mengapa mereka menghilangkan pointer dalam bahasa yang lebih modern?
Apakah Anda pikir pengetahuan tentang pointer masih penting bagi programmer baru? Orang-orang menggunakan VB.NET atau Java hari ini, yang mendukung lebih banyak fitur-fitur yang lebih maju daripada C (dan tidak menggunakan konsep pointer) dan banyak orang seperti yang saya lihat sekarang (teman saya) memilih bahasa ini mengabaikan C karena mereka mendukung fitur-fitur canggih. Saya memberitahu mereka untuk memulai dengan C. Mereka mengatakan itu sia-sia untuk mempelajari konsep-konsep pointer ketika Anda melakukan hal-hal canggih di VB.NET atau Java yang tidak mungkin dalam C.
Bagaimana menurut anda?
Diperbarui :
Komentar yang saya baca di Google adalah:
Komputer sebelumnya terlalu lambat dan tidak dioptimalkan.
Menggunakan pointer memungkinkan untuk mengakses alamat secara langsung dan ini menghemat waktu alih-alih membuat salinannya dalam panggilan fungsi.
Keamanan secara signifikan lebih buruk menggunakan pointer, dan itulah sebabnya Java dan C # tidak termasuk mereka.
Ini dan beberapa lagi apa yang saya temukan. Saya masih membutuhkan jawaban yang berharga. Itu akan sangat dihargai.
Jawaban:
Kembali pada masa itu, pengembang bekerja lebih dekat dengan logam. C pada dasarnya adalah pengganti tingkat yang lebih tinggi untuk perakitan, yang hampir sedekat dengan perangkat keras yang Anda bisa dapatkan, jadi wajar saja Anda membutuhkan petunjuk untuk menjadi efisien dalam menyelesaikan masalah pengkodean. Namun, pointer adalah alat yang tajam, yang dapat menyebabkan kerusakan besar jika digunakan secara sembarangan. Juga, penggunaan pointer secara langsung membuka kemungkinan banyak masalah keamanan, yang saat itu tidak menjadi masalah (pada tahun 1970, internet terdiri dari sekitar beberapa lusin mesin di beberapa universitas, dan bahkan tidak disebut seperti itu). ...), tetapi menjadi semakin penting sejak itu. Jadi saat ini bahasa tingkat yang lebih tinggi dirancang secara sadar untuk menghindari pointer memori mentah.
Mengatakan bahwa "hal-hal canggih yang dilakukan dalam VB.Net atau Java tidak mungkin dalam C" menunjukkan sudut pandang yang sangat terbatas, untuk sedikitnya :-)
Pertama-tama, semua bahasa ini (bahkan majelis) Turing lengkap sehingga dalam teori apa pun yang mungkin dalam satu bahasa, adalah mungkin dalam semua. Coba pikirkan apa yang terjadi ketika sepotong VB.Net atau kode Java dikompilasi dan dieksekusi: akhirnya, itu diterjemahkan ke dalam (atau dipetakan ke) kode mesin, karena itu adalah satu-satunya hal yang dimengerti mesin. Dalam bahasa yang dikompilasi seperti C dan C ++, Anda benar-benar bisa mendapatkan tubuh penuh kode mesin yang setara dengan kode sumber tingkat tinggi asli, sebagai satu atau lebih file / pustaka yang dapat dieksekusi. Dalam bahasa berbasis VM, lebih sulit (dan bahkan mungkin tidak mungkin) untuk mendapatkan seluruh representasi kode mesin yang setara dengan program Anda, tetapi pada akhirnya masih ada di suatu tempat, dalam ceruk yang dalam dari sistem runtime dan JIT.
Sekarang, tentu saja, ini adalah pertanyaan yang sepenuhnya berbeda apakah beberapa solusi layak dalam bahasa tertentu. Tidak ada pengembang yang masuk akal yang akan mulai menulis aplikasi web dalam perakitan :-) Tetapi perlu diingat bahwa sebagian besar atau semua bahasa tingkat tinggi itu dibangun di atas sejumlah besar runtime dan kode perpustakaan kelas, sebagian besar dari yang diimplementasikan dalam bahasa tingkat yang lebih rendah, biasanya dalam C.
Jadi untuk sampai ke pertanyaan,
Konsep di balik pointer adalah tipuan . Ini adalah konsep yang sangat penting dan IMHO setiap programmer yang baik harus menangkapnya pada level tertentu. Bahkan jika seseorang bekerja hanya dengan bahasa tingkat yang lebih tinggi, tipuan dan referensi masih penting. Gagal memahami ini berarti tidak bisa menggunakan seluruh kelas alat yang sangat kuat, serius membatasi kemampuan pemecahan masalah seseorang dalam jangka panjang.
Jadi jawaban saya adalah ya, jika Anda ingin menjadi programmer yang benar-benar baik, Anda harus memahami pointer juga (serta rekursi - ini adalah batu sandungan khas lainnya untuk pengembang pemula). Anda mungkin tidak perlu memulainya - saya rasa C tidak optimal sebagai bahasa pertama saat ini. Tetapi pada titik tertentu seseorang harus terbiasa dengan tipuan. Tanpanya, kita tidak akan pernah bisa memahami bagaimana alat, pustaka, dan kerangka kerja yang kita gunakan benar-benar berfungsi. Dan pengrajin yang tidak mengerti bagaimana alatnya bekerja sangat terbatas. Cukup adil, seseorang dapat memahami itu dalam bahasa pemrograman tingkat yang lebih tinggi juga. Satu tes lakmus yang baik adalah menerapkan daftar yang ditautkan dengan benar - jika Anda dapat melakukannya dalam bahasa favorit Anda, Anda dapat mengklaim bahwa Anda memahami tipuan dengan cukup baik.
Tetapi jika bukan karena hal lain, kita harus melakukannya untuk belajar menghargai para programmer lama yang berhasil membangun hal-hal yang tidak dapat dipercaya dengan menggunakan alat-alat sederhana yang mereka miliki (dibandingkan dengan apa yang kita miliki sekarang). Kita semua berdiri di atas pundak para raksasa, dan sungguh baik bagi kita untuk mengakui hal ini, daripada berpura-pura bahwa kita adalah raksasa itu sendiri.
sumber
Saya pikir Anda perlu berbeda.
Java dan bahasa tingkat tinggi lainnya tidak menghapus pointer. Apa yang mereka lakukan adalah menghapus aritmatika pointer biasa.
Bahkan, Java masih memungkinkan aritmatika pointer yang dilindungi dan dibatasi : akses array. Dalam C lama yang biasa, akses array tidak lain adalah dereferencing. Ini adalah notasi yang berbeda, gula sintaksis, jika Anda mau, untuk berkomunikasi dengan jelas, apa yang Anda lakukan.
Namun,
array[index]
setara dengan*(array+index)
. Karena itu juga setara denganindex[array]
meskipun saya kira beberapa kompiler C mungkin memberi Anda peringatan, jika Anda melakukannya.Sebagai akibat wajar,
pointer[0]
sama dengan*pointer
. Itu hanya karena "penunjuk ke array" adalah alamat entri pertama array dan alamat elemen selanjutnya dihitung dengan menambahkan indeks.Di Jawa, pointer aritmatika polos (referensi dan dereferencing) tidak ada lagi. Namun ada pointer. Mereka menyebutnya referensi, tetapi itu tidak mengubah apa itu. Dan akses array masih merupakan hal yang persis sama: Lihatlah alamatnya, tambahkan indeks dan gunakan lokasi memori itu. Namun di Jawa, itu akan memeriksa apakah indeks itu berada dalam batas array yang semula Anda alokasikan. Jika tidak, itu akan melempar pengecualian.
Sekarang keuntungan dari pendekatan Java adalah, bahwa Anda tidak memiliki kode, yang secara acak menulis byte acak ke lokasi memori arbitrer. Ini meningkatkan keamanan dan juga keamanan, karena jika Anda gagal memeriksa buffer overflow dan semacamnya, runtime akan melakukannya untuk Anda.
Kerugian dari ini adalah, itu hanya kurang kuat. Dimungkinkan untuk melakukan pemrograman yang aman memori dalam C. Tidak mungkin mendapatkan manfaat dari kecepatan dan kemungkinan pemrograman yang tidak aman di Jawa.
Sebenarnya, tidak ada yang sulit tentang pointer atau aritmatika pointer. Mereka biasanya dijelaskan dengan cara yang berbelit-belit, sedangkan semua penunjuk adalah, adalah indeks ke satu array raksasa (ruang memori Anda), semua yang dirujuk pada suatu nilai berarti memberi Anda indeks di mana menemukannya, semua yang dilakukan dereferencing adalah mencari. nilai pada indeks yang diberikan. (Ini hanya sedikit disederhanakan, karena tidak memperhitungkan bahwa nilai-nilai memiliki ukuran yang berbeda dalam memori, tergantung pada jenisnya. Tapi itu detail yang mendetail, bukan bagian dari konsep aktual)
IMHO, semua orang di pekerjaan kita harus bisa memahami itu, atau mereka hanya di bidang yang salah.
sumber
back2dos
itu benar pertama kalinya, karena(array + index)
sudah memperhitungkan ukuran objek (dalam C).array[index]
, dan itu*(array+index)
. Jika Anda ingin menunjukkan bagaimana kompiler melakukan hal-hal secara internal, Anda dapat secara eksplisit berbicara tentang byte atau memberikan perakitan.Konsep pointer penting dalam tubuh pengetahuan pemrograman komputer umum. Memahami konsep itu baik untuk calon programmer atau programmer dari bahasa apa pun, bahkan jika bahasa tersebut tidak secara langsung mendukungnya.
Pointer digunakan dalam Struktur Data (daftar tertaut) dan desain Basis Data (Kunci Asing).
Bahasa seperti VB dan C # dapat mengirimkan data dengan "referensi" ke metode, yang dapat dianggap sebagai jenis pointer.
Memahami di mana data dialokasikan dalam memori (stack vs heap) masih penting untuk efisiensi algoritma.
Mempelajari dasar-dasar yang benar adalah penting menurut saya.
sumber
std::sort
,std::partition
,std::find
, Dll Mereka bekerja dengan pointer, dan mereka bekerja dengan benda-benda yang bertindak seperti pointer (iterator). Dan mereka mengerjakan semua koleksi umum; daftar tertaut, array dinamis,deque
s, pohon, atau jenis lain dari koleksi yang ditentukan pengguna. Anda tidak dapat melakukan abstraksi semacam itu tanpa petunjuk.Ya, ya, ya, ya dan ya !!!
Jika Anda tidak tahu dasar-dasarnya, Anda TIDAK akan pernah bisa memecahkan masalah yang sangat sulit, aneh, sulit dan rumit yang menghadang Anda.
Dan jika Anda benar-benar memahami dasar-dasarnya, Anda JAUH lebih mudah dipasarkan di pasar kerja.
Saya pernah bekerja dengan seorang pria yang telah pemrograman selama 10 tahun, dan tidak tahu bagaimana pointer bekerja. Saya (jauh lebih junior) menghabiskan waktu berjam-jam di papan tulis untuk mendidiknya. Itu membuka mata saya. Dia tidak punya ide tentang begitu banyak hal mendasar.
Ketahui sebanyak mungkin yang Anda bisa.
sumber
Ya, pemahaman itu penting.
Beberapa bulan yang lalu saya pemrograman di C #, dan saya ingin membuat salinan daftar. Tentu saja apa yang saya lakukan adalah
NewList = OldList;
dan kemudian mulai memodifikasiNewList
. Ketika saya mencoba untuk mencetak kedua daftar, keduanya sama, karenaNewList
hanya sebuah penunjukOldList
dan bukan salinan, jadi saya benar-benar berubahOldList
selama ini. Tidak butuh waktu lama bagi saya untuk mengetahui yang satu itu, tetapi beberapa teman sekelas saya tidak secepat itu dan harus dijelaskan mengapa ini terjadi.Contoh:
Dan tentu saja, hasilnya seperti ini:
Mengetahui cara menggunakannya tidak begitu penting, namun memahaminya sangat penting!
sumber
NewList
hanyalah sebuah pointer keOldList
" - tepatnya, keduanyaNewList
danOldList
hanya pointer, merujuk keList
objek yang sama .b
tidak lagi tidak memiliki referensi untuk itu, dan sekarang menjadi sampah.Menunjuk konsep! = Menunjuk aritmatika! = Menunjuk sintaks
Yang penting selalu, jika Anda perlu (dan Anda memang) memahami salinan yang dalam / dangkal, lulus dengan referensi / lulus dengan nilai, dll. Dua hal lainnya hanya penting jika bahasa Anda memungkinkan Anda menggunakannya.
sumber
a=[1,2]; b=a; a.append(3)
bahwa keduanyaa
danb
akan merujuk kedua objek yang sama[1,2,3]
tanpa mengetahui hal-hal seperti dalam Ci
elemen th array dapat dirujuk oleharr[i]
ataui[arr]
sebagaimana keduanya*(arr+i)
. Saya lebih suka ketika bahasa tidak membiarkani[arr]
digunakan.Karena pointer adalah mekanisme yang sangat kuat yang dapat digunakan dalam banyak cara.
Karena pointer adalah mekanisme yang sangat berbahaya yang dapat disalahgunakan dalam banyak hal.
Saya pikir programmer harus belajar tentang pointer, tetapi dari perspektif pendidikan, tidak bijaksana untuk memperkenalkan mereka lebih awal. Alasannya adalah bahwa mereka digunakan untuk berbagai tujuan, sulit untuk mengatakan sebagai pemula mengapa Anda menggunakan pointer dalam keadaan tertentu.
Berikut adalah daftar tidak lengkap untuk apa pointer digunakan:
new T
)struct T { T* next; /* ... */ };
)for (T* p = &a[0]; p != &a[0] + n; ++p) { ... }
)T* new_pointer = existing_pointer;
)T* pointer_to_base = pointer_to_derived;
)mutate(&object);
)if (p) { /* ... */ }
)Perhatikan bahwa menggunakan mekanisme tunggal untuk semua konsep ini menunjukkan kekuatan dan keanggunan untuk programmer berpengalaman dan potensi kebingungan yang besar bagi seseorang yang baru dalam pemrograman.
sumber
Mengapa? Anda dapat menulis sistem besar dengan desainer formulir dan pembuat kode. Bukankah itu cukup? (ironi)
Dan sekarang yang serius, pointer bukan bagian penting dari pemrograman di banyak bidang, tetapi mereka memungkinkan orang untuk memahami cara kerja internal. Dan jika kita tidak memiliki seorang pun yang memahami cara kerja internal, akan ada situasi di mana SQL2020, Windows 15 dan Linux 20,04 akan ditulis dalam mesin virtual sampah yang dikumpulkan dengan lebih dari 30 lapisan abstraksi, dengan kode yang dihasilkan melalui IDE, dalam JavaScript .
Ini jelas bukan yang ingin saya lihat.
Jadi ya, tentu saja mereka harus!
sumber
Baik Jawa atau C # dihilangkan pointer, mereka memiliki referensi yang hampir sama. Apa yang dihilangkan adalah pointer arithmetics, yang dapat dihilangkan dalam kursus pengantar.
Tidak ada aplikasi non-sepele yang dapat dilakukan tanpa konsep pointer atau referensi, sehingga itu layak untuk diajarkan (Tidak ada alokasi memori dinamis yang dapat dilakukan tanpa mereka).
Pertimbangkan yang berikut ini dalam C ++ dan Java, dan saya kira itu tidak jauh berbeda dalam C #:
aClass *x = new aClass();
aClass x = new aClass();
Tidak ada terlalu banyak perbedaan antara pointer dan referensi, kan?
Pointer arithmetics harus dihindari kecuali jika diperlukan dan ketika pemrograman dengan model tingkat tinggi, jadi tidak ada banyak masalah di sana.
sumber
Pemrogram profesional harus menguasai pointer.
Orang-orang yang ingin mengetahui pemrograman harus belajar tentang keberadaan dan implikasinya, tetapi tidak harus menggunakannya.
Orang-orang yang ingin menyelesaikan masalah pribadi melalui pemrograman (seperti saya, yang menggunakan banyak skrip Python) bisa mengabaikannya sama sekali.
Nah, itu menurut saya ...; o)
sumber
Pointer address variabel adalah kasus spesifik dari konsep tipuan yang lebih umum. Indirection digunakan dalam sebagian besar (semua?) Bahasa modern dalam banyak konstruksi seperti delegasi dan panggilan balik. Memahami konsep tipuan memungkinkan Anda untuk mengetahui kapan dan bagaimana cara terbaik menggunakan alat-alat ini.
sumber
Benar-benar YA ! Setiap orang yang program perlu memahami petunjuk dan tipuan.
Pointer adalah bagaimana sejumlah besar akses data dilakukan dalam semua bahasa. Pointer adalah fitur perangkat keras dari semua mikroprosesor. Bahasa tingkat tinggi seperti Java, VB & C # pada dasarnya menutup akses langsung ke petunjuk dari pengguna bahasa dengan referensi. Referensi merujuk ke objek melalui skema manajemen memori bahasa (bisa berupa pointer dengan metadata atau hanya nomor untuk tabel memori, misalnya).
Memahami bagaimana pointer bekerja sangat penting untuk memahami bagaimana sebenarnya komputer bekerja. Pointer juga lebih fleksibel dan kuat daripada referensi.
Sebagai contoh, alasan mengapa array mulai dari indeks nol adalah karena array sebenarnya adalah singkatan untuk aritmatika pointer. Tanpa belajar tentang cara kerja pointer, banyak programmer pemula tidak cukup mendapatkan array.
Baris 2 dalam aritmatika pointer adalah:
Tanpa memahami pointer, orang tidak dapat memahami manajemen memori, tumpukan, tumpukan atau bahkan array! Selain itu, orang perlu memahami pointer dan dereferencing untuk memahami bagaimana fungsi dan objek dilewatkan.
TL: DR : Memahami pointer adalah dasar untuk memahami agar komputer benar-benar berfungsi .
sumber
Saya pikir itu bermuara pada kenyataan bahwa kebutuhan untuk berurusan dengan pointer jatuh ketika programmer kurang berurusan dengan perangkat keras langsung yang mereka jalankan. Misalnya, mengalokasikan struktur data daftar tertaut dengan cara yang sesuai dengan urutan modul memori 640 byte yang dimiliki perangkat keras khusus.
Berurusan dengan pointer secara manual dapat rawan kesalahan (mengarah ke kebocoran memori dan kode yang dapat dieksploitasi) dan memakan waktu untuk memperbaikinya. Jadi Java dan C # dll semua sekarang mengelola memori Anda dan pointer Anda untuk Anda melalui Mesin Virtual (VMs) mereka. Ini bisa dibilang kurang efisien daripada menggunakan C / C ++ mentah, meskipun VM terus meningkat.
C (dan C ++) masih banyak digunakan bahasa, terutama di High Performance Computing, Gaming, dan ruang perangkat keras tertanam. Saya pribadi bersyukur saya belajar tentang pointer karena transisi ke referensi Java (konsep yang mirip dengan pointer) sangat mudah dan saya tidak kehilangan ketika saya melihat NullPointerException pertama saya (yang seharusnya benar-benar disebut NullReferenceException, tapi saya ngelantur) .
Saya akan menyarankan belajar tentang konsep pointer karena mereka masih menopang banyak struktur data dll. Kemudian pergi untuk memilih bahasa yang Anda suka bekerja, mengetahui bahwa jika sesuatu seperti NPE muncul, Anda tahu apa yang sebenarnya terjadi .
sumber
Ini adalah kebenaran objektif:
Beberapa bahasa mendukung akses memori langsung (pointer), beberapa tidak. Ada alasan bagus untuk setiap kasus.
Seperti yang dikatakan seseorang di sini, di masa C, manajemen memori otomatis tidak serumit seperti sekarang ini. Dan bagaimanapun, orang sudah terbiasa dengannya. Pemrogram yang baik saat itu memiliki pemahaman yang jauh lebih dalam tentang program komputer daripada generasi kita (saya 21). Mereka telah menggunakan kartu punch dan hari menunggu untuk beberapa waktu kompilasi pada mainframe. Mereka mungkin tahu mengapa setiap bit dalam kode mereka ada.
Keuntungan nyata dari bahasa seperti C adalah bahwa mereka memungkinkan Anda untuk memiliki kontrol yang lebih baik atas program Anda. Kapan Anda benar - benar membutuhkannya , hari ini? Hanya ketika Anda membuat aplikasi infrastruktur, seperti program terkait OS dan lingkungan runtime. Jika Anda hanya ingin mengembangkan perangkat lunak yang baik, cepat, kuat, dan andal, maka manajemen memori otomatis paling sering menjadi pilihan Anda yang lebih baik.
Faktanya adalah bahwa akses memori langsung sebagian besar telah disalahgunakan selama sejarah pengembangan perangkat lunak. Orang-orang telah membuat program yang membocorkan memori, dan sebenarnya lebih lambat karena alokasi memori yang berlebihan (dalam C itu mudah dan umum untuk memperpanjang ruang memori virtual proses untuk setiap alokasi tunggal).
Saat ini, mesin virtual / runtime melakukan pekerjaan yang jauh lebih baik daripada 99% programmer dalam mengalokasikan dan melepaskan memori. Selain itu, mereka memungkinkan Anda fleksibilitas ekstra dalam aliran yang Anda inginkan untuk program Anda, karena Anda (kebanyakan) tidak sibuk dengan membebaskan memori yang dialokasikan pada waktu dan tempat yang tepat.
Adapun pengetahuan. Saya pikir itu mengagumkan bahwa programmer tahu bagaimana lingkungan tempat mereka memprogram diimplementasikan. Belum tentu dengan detail terkecil, tapi gambaran besarnya.
Saya pikir mengetahui bagaimana pointer bekerja (paling tidak) menarik. Sama seperti mengetahui bagaimana polimorfisme diimplementasikan. Dari mana proses Anda mendapatkan ingatannya, dan bagaimana. Ini adalah hal-hal yang selalu menarik bagi saya, secara pribadi. Jujur saya dapat mengatakan bahwa mereka telah membuat saya seorang programmer yang lebih baik, tetapi saya tidak dapat mengatakan bahwa mereka adalah kebutuhan pendidikan bagi siapa saja yang ingin menjadi programmer yang baik. Dalam kedua kasus itu, mengetahui lebih banyak sering kali akan membuat Anda lebih baik dalam pekerjaan Anda.
Karena bahkan jika Anda tidak mengetahui semua detail kecil, seseorang yang melakukannya akan dapat mengubah apa yang Anda buat menjadi sesuatu yang hanya berkinerja lebih baik. Dan itu seringkali bukan pekerjaan yang sulit, setelah Anda memiliki desain yang tepat, bersih dan dapat diuji di tempat (dan itu biasanya sebagian besar pekerjaan).
Jika saya seorang pewawancara yang ingin mempekerjakan seseorang untuk aplikasi bahasa tingkat tinggi, itu akan menjadi hal yang paling menarik bagi saya.
Pengetahuan tingkat rendah adalah bonus. Ini bagus untuk debugging dan sesekali menciptakan solusi yang sedikit lebih baik. Itu membuat Anda orang yang menarik, secara profesional. Ini memberi Anda rasa hormat di tempat kerja Anda.
Tetapi di dunia sekarang ini, itu bukanlah persyaratan suci.
sumber
Untuk sebagian besar tujuan praktis dalam bahasa OO tingkat tinggi, cukup memahami referensi, Anda tidak benar-benar perlu memahami bagaimana cara bahasa ini menerapkan referensi dalam hal petunjuk.
Ada banyak lebih banyak pendekatan multi-paradigma fungsional dan modern yang saya nilai jauh lebih tinggi daripada mampu melakukan aritmatika pointer mewah untuk mengatakan, menulis fungsi copy string dioptimalkan 1000 mungkin melakukan lebih buruk daripada String.copy std lib Anda dengan cara apa pun.
Saya menyarankan untuk mempelajari konsep yang jauh lebih berbeda, tingkat lebih tinggi terlebih dahulu, dan bercabang untuk belajar bahasa dari desain yang berbeda untuk memperluas wawasan Anda sebelum mencoba untuk mengkhususkan diri dalam hal-hal yang dekat dengan perangkat keras.
Saya sering melihat upaya yang gagal total untuk mengoptimalkan web servlet atau kode serupa untuk keuntungan 5%, ketika caching (memoisasi), pengoptimalan SQL, atau hanya penyetelan konfigurasi server web dapat menghasilkan 100% atau lebih dengan sedikit usaha. Mengotak-atik pointer adalah optimasi prematur dalam banyak kasus.
sumber
Tentunya, kita perlu memiliki konsep pointer yang menyeluruh, jika Anda benar-benar ingin menjadi programmer yang baik. Alasan untuk konsep Pointer adalah akses langsung ke nilai Anda yang menjadi lebih efisien dan efektif dengan batasan waktu ...
Juga, Sekarang, mengingat Aplikasi Seluler, yang memiliki Memori sangat terbatas, kita perlu menggunakannya dengan sangat hati-hati sehingga operasinya sangat cepat dengan respons pengguna ... Jadi untuk tujuan ini kita memerlukan referensi langsung ke nilai ...
Pertimbangkan perangkat Apple, atau bahasa Objective C, yang sepenuhnya berfungsi dengan konsep pointer saja. Semua variabel yang dinyatakan dalam Objective C memiliki Pointer. Anda harus membaca wiki Objective C
sumber