Halo, dan selamat datang kembali. Sekarang kita memahami pointer sedikit lebih
detail, saya ingin berbicara tentang pointer karakter,
terutama bagaimana Anda dapat menggunakan pointer karakter untuk mewakili string.
String adalah array karakter, banyak karakter, kata-kata.
Jadi kita sekarang tahu bagaimana array berhubungan dengan pointer dalam konsep aritmatika pointer.
Konsep yang sangat, sangat berguna.
Konsep-konsep ini bisa sangat berguna bila diterapkan pada
array karakter string karena sekarang kita dapat dengan mudah menelusuri karakter string demi karakter.
Salah satu aplikasi paling umum menggunakan pointer ke array adalah
sebagai pointer ke string karakter.
Alasannya adalah salah satu kenyamanan dan efisiensi notasi.
Jadi menggunakan variabel tipe pointer ke char untuk
mereferensikan string memberi Anda banyak fleksibilitas.
Jadi, Anda akan mencoba
menggunakan pointer karakter sebanyak mungkin di
atas array karakter, khususnya menggunakan pointer karakter untuk meneruskan data ke suatu fungsi.
Segala macam hal baik seperti itu.
Jadi mari kita lihat contoh yang menggunakan array untuk menyalin string.
Dalam contoh ini, parameter array kita akan menjadi array karakter.
Anda akan melihatnya tepat di deklarasi fungsi.
Saya ingin membandingkan ini dengan fungsi yang mengambil penunjuk
karakter dan menunjukkan kepada Anda bagaimana fungsi penunjuk karakter jauh lebih efisien.
Jadi dalam contoh ini, kita memiliki dua fungsi,
satu yang mengambil array dan satu lagi
yang mengambil pointer.
Dalam string salinan fungsi pertama,
kita dapat menelusuri seluruh array menggunakan for loop I sama dengan nol dari
sub I dan kita teruskan sampai kita melihat string karakter nol
dan kemudian kita menaikkan variabel kontrol loop kita.
Dan kemudian yang harus Anda lakukan adalah mengatakan 2 sub I sama dengan sub I. Kami melakukan tugas langsung
di sana.
Dan kemudian di bagian paling akhir setelah kita melakukan semuanya sampai kita
melihat karakter null, kita menambahkan karakter null ke akhir array
to kita, cukup mendasar. Sekarang mari kita lihat bagaimana kita melakukannya ketika kita menggunakan pointer.
Pertama, kita mendeklarasikan pointer sebagai deklarasi fungsi pada string copy dengan
hanya mengucapkan char star to char start from.
Dalam perulangan for kita, kita tidak harus benar-benar mendeklarasikan
variabel apa pun karena kita memiliki pointer
dan kita hanya ingin mengulanginya sampai dari menyentuh terminator nol.
Dan kemudian kita dapat menambahkan pointer dari dan ke.
Karena di sini kita melakukan aritmatika titik.
Kami hanya menambahkan satu ke pointer yang menambah alamatnya satu per satu, yang
mendapatkan karakter berikutnya.
Dan baris for loop berikutnya kita hanya
melakukan dereferensi ke dan dari karena kita
ingin menetapkan nilai aktual yang ditunjuk oleh pointer,
karakter aktual ke pointer ke.
Dan kemudian di bagian paling akhir, kami
menambahkan karakter nol ke mana pun penunjuk to menunjuk
yang akan berada di akhir alamat terakhir dari string untuk dari tetapi
sekarang menunjuk ke alamat.
Itu tidak terlihat terlalu buruk. Maksud saya, Anda memiliki for loop.
Anda pada dasarnya memiliki jumlah baris kode yang sama.
Tetapi Anda melihat perbedaan dalam sintaks.
Anda tidak menggunakan subskrip dan Anda menggunakan pointer, gunakan tanda bintang.
Sekali lagi, benar-benar masalah kenyamanan notasi.
Anda tidak melihat keuntungan besar di sini.
Tetapi Anda sebenarnya dapat lebih mengoptimalkan ini bahkan untuk
mendapatkan lebih sedikit kode saat Anda menggunakan pointer.
Jadi, jika Anda memiliki larik
char sebagai penunjuk, jika Anda memiliki larik karakter yang disebut teks, Anda
juga dapat menentukan penunjuk ke sana dan menggunakan elemen dalam teks.
Jadi di sini kita bisa mengatakan penunjuk
teks bintang char, begitulah cara Anda mendefinisikan penunjuk karakter.
Jika penunjuk teks disetel menunjuk ke awal larik karakter yang
disebut teks, maka Anda bisa
menambahkannya satu per satu menggunakan operator implementasi dan decrementasi sebelum dan sesudah ini.
Jadi ini di atas, pointer teks plus plus ini akan mengatur penunjuk teks yang
menunjuk ke karakter berikutnya dalam teks, yaitu teks sub 1.
Jadi jika kita ingin melihat ke sinar berikutnya seperti bilangan bulat,
yang harus kita lakukan adalah menambahkan 1 2 dan kita bisa mendapatkan karakter berikutnya.
Ini jauh lebih berguna meskipun dalam
array karakter karena Anda dapat dengan mudah memanipulasi karakter satu per satu.
Jika Anda melakukan penunjuk teks minus minus, yang merupakan operator pengurangan, yang
akan mengatur penunjuk ke karakter sebelumnya dalam teks dengan
asumsi bahwa penunjuk teks tidak menunjuk ke awal teks.
Karena jika ya, Anda akan memiliki kesalahan di bawah batas ini.
Jika itu melakukan plus plus di akhir string, Anda akan memiliki kesalahan di luar batas.
Anda harus selalu berhati-hati seperti halnya aritmatika bilangan bulat untuk tidak melewati batas untuk sebuah array.
Tapi sangat sederhana, ini berhubungan sangat erat dengan ketika Anda melakukan
aritmatika pointer integer.
Karakter pointer aritmatika adalah hal yang sama.
Ini bahkan lebih berguna karena sekarang Anda benar-benar dapat melihat karakter individu tanpa menggunakan subskrip.
Jadi jika kita melihat contoh sebelumnya
dan kita sebenarnya dapat mengoptimalkannya sedikit lebih banyak menggunakan pointer untuk
membuatnya lebih sedikit baris kode.
Jadi sekarang di copy string kita, deklarasi fungsi yang kita lakukan ini sama seperti
sebelumnya, buat beberapa pointer menggunakan tanda bintang.
Tetapi kita tidak menggunakan perulangan for lagi karena tidak ada
gunanya menggunakan perulangan for pada contoh
sebelumnya karena kita sebenarnya tidak perlu menginisialisasi variabel kontrol perulangan.
Yang perlu kita lakukan adalah keluar dari loop
pada suatu kondisi dan kemudian kita benar-benar menggunakan operator incrementation dan decrementation di
loop for, tetapi kita bahkan tidak perlu melakukan itu.
Ini sebenarnya menjadi lebih sederhana di sini karena jika kita menggunakan perulangan while,
yang harus kita lakukan adalah melihat perulangan while dan itu akan
melompat keluar jika menunjuk ke karakter null karena karakter null sebenarnya
sama dengan nol.
Dan while loop ingat bahwa Boolean di
c diwakili oleh bilangan bulat, satu benar dan kemudian
nol salah atau benar-benar nol salah dan kemudian yang lainnya benar.
Dalam hal ini, karakter nol 0 yang salah, itu akan melompat keluar.
Jadi yang harus Anda lakukan untuk kondisi keluar di loop while adalah tanda bintang.
Apa itu melakukan yang dereferencing dari untuk melihat apa nilai karakter itu.
Jadi ketika kita sampai di akhir string yang ingin kita salin, kita melompat keluar.
Kalau tidak, kami hanya benar-benar menempatkan modifikasi
pointer kami di sana, dua plus plus dari plus plus.
Sekarang ini adalah operator post incrementation.
Jadi apa artinya ini plus plus ada di sisi kanan variabel.
Dan ketika Anda melakukan ini, itu
berarti Anda tidak menambahkannya sampai pernyataan selesai.
Jadi apa yang akan dilakukan, itu akan mengatakan bintang 2 sama dengan mulai dari.
Dan kemudian setelah pernyataan itu selesai, itu akan menambah 2 1 dan itu akan menambah dari 1.
Jika Anda memiliki plus plus sebelum nama variabel, itu
akan menambah variabel itu sebelum mengeksekusi pernyataan itu dan itu akan menjadi
masalah karena pada dasarnya kita akan kehilangan elemen pertama yang
disalin dalam string.
Tapi kita tidak membutuhkan baris kode lagi. Kami sedang melakukan aritmatika dan penugasan
pointer kenaikan aktual dalam pernyataan yang sama, jadi kami
mengurangi kode satu per satu.
Sekali lagi, notasinya sangat sederhana.
Kami melakukan tugas aritmatika bilangan bulat dengan sangat mudah.
Dan kemudian pada akhirnya, setelah kita selesai,
menyalin semua string, kita hanya
menambahkan akhir karakter null ke pointer yang kita dereferensi karena keduanya sebenarnya
mengapa melewati loop itu akan menunjuk ke yang terakhir karakter.
Jadi hanya sedikit dibersihkan sedikit di sini.
Ini menunjukkan kepada Anda kekuatan pointer dan
bagaimana Anda dapat menggunakan pointer dan aritmatika di baris yang sama
dan dengan operator penambahan dan pengurangan ini, plus plus dan minus minus
ini, membuatnya lebih cepat dan lebih mudah sehingga lebih efisien juga.
Jika kita ingin menggunakan fungsi string salinan ini, kita bisa membuat dua array karakter.
Kita dapat meneruskan array karakter secara langsung ke string salinan karena array karakter
0 adalah pointer.
Mereka adalah pointer, jadi kita tidak perlu benar-benar melakukan
de-referensi atau menambahkan alamat atau apapun. Kami hanya bisa mengatakan string2, string1.
Jadi yang akan dilakukan adalah menyalin
string untuk disalin ke array karakter string2 dan
kemudian mencetaknya menggunakan printf.
Saya ingin membahas contoh bagaimana Anda dapat menggunakan
pointer karakter alih-alih array karakter dan mengapa mereka terkadang lebih disukai.
Kami menyebutkan bahwa terkadang preferensi programmer di mana jika Anda
telah memprogram dalam bahasa sebelumnya seperti seperti
Fortran, Anda mungkin terbiasa menaikkan. Tetapi jika Anda memilikinya,
Anda akan melihat manfaat menggunakan pointer.
Semoga ini bermanfaat. Terima kasih.