Halo, dan selamat datang kembali. Dalam kuliah ini, saya ingin
memberikan demonstrasi untuk tantangan kami sebelumnya
yaitu pemahaman lewat referensi,
memiliki parameter di dalam suatu fungsi mengambil pointer.
Jadi mari kita buat proyek baru. Kami akan menyebut satu
penunjuk ini lewat referensi karena itulah yang ditunjukkannya,
hal-hal dasar di sini, proyek baru,
aplikasi konsol c. Cukup mudah di sini.
Sebut saja pointer ini garis bawah
lewat referensi.
Sekali lagi, mendemonstrasikan bagaimana kita dapat menggunakan parameter di dalam suatu fungsi
untuk melewatkan data dan bagaimana data itu kemudian akan
dimodifikasi di luar fungsi.
Jadi hal pertama yang akan kita lakukan adalah membuat deklarasi fungsi kita,
prototipe fungsi kita. Ini selalu bagus untuk dilakukan
sehingga Anda dapat menelepon di mana saja di program Anda. Kami hanya akan menyebutnya persegi.
Hal utama dalam deklarasi fungsi ini adalah akan mengambil pointer.
Jadi itu hanya akan mengambil penunjuk akhir, jadi kami hanya akan mengatakan int bintang
dan kemudian Anda dapat memberikan nama apa pun yang Anda inginkan dan Anda mengakhirinya dengan titik koma.
Dan fungsi utama kita, pertama
yang akan kita lakukan adalah kita hanya akan membuat variabel integer biasa
dan kita hanya akan mengatakan int num dan kita hanya akan mengatakan kode keras ke 9.
Dan yang akan kita lakukan adalah memanggil fungsi kuadrat kita.
Fungsi kuadrat kami tidak akan mengembalikan data apa pun, itu akan batal.
Kita harus memberikan alamatnya sekarang karena fungsi kuadrat kita pada baris 4 mengambil pointer.
Jadi kita tidak bisa melewatkan num, kita harus benar-benar memasukkan alamat num, dan kemudian
kita akan mengakhirinya dengan titik koma. Jadi kami memanggil fungsi
menggunakan nama fungsi dan kemudian meneruskan alamat variabel.
Karena variabel di sini dalam baris delapan bukanlah pointer.
Kemudian pada dasarnya kita bisa mencetak nilai num.
Dan lagi, apa yang akan Anda perhatikan di sini adalah karena
kita meneruskan alamat, jika kita mengubah data dalam fungsi itu sendiri untuk variabel
itu, itu akan berubah di luarnya. Jadi di sini kita akan
mengatakan kuadrat dari angka yang diberikan adalah dan katakan saja persen d,
kita akan menambahkan umpan baris dan
kita hanya akan mencetak num, dan num tidak akan
menjadi 9. , saya akan memberitahu Anda bahwa banyak.
Dan kemudian kami hanya akan mengembalikan 0 untuk fungsi reguler kami.
Jadi sekarang kita harus benar-benar mengimplementasikan fungsi, mendefinisikannya.
Untuk mendefinisikannya, saya hanya akan mengatakan void square.
Kami tahu ini membutuhkan pointer integer, jadi saya akan mengatakan int star x.
Dan sekarang kita hanya ingin mengalikannya dengan dirinya sendiri.
Tapi kami ingin memastikan bahwa kami tidak mengubah alamatnya.
Jadi yang bisa kita lakukan di sini adalah kita bisa
membuat ini konstan, tetapi Anda
ingin menempatkan konstanta setelah tipe data karena kita
tidak ingin mengubah nilai x atau alamat yang ditunjuknya kita bisa mengatakan int konstan.
Jika kita tidak ingin mengubah nilai
x, kita katakan konstan. Tapi kita ingin mengubah nilai x, kita akan mengkuadratkannya dengan sendirinya.
Jadi untuk menguadratkannya sendiri, pertama-tama, yang ingin kita ubah
adalah nilai akhir dari x. Jadi kita harus menggunakan
operator tipuan. Kita harus melakukan de-referensi dengan tanda bintang.
Dan kemudian kita hanya akan mengatakan sama, kita tidak
ingin melakukan x kali x karena itu hanya akan mengalikan alamat. X adalah pointer, kita tidak ingin hanya mendapatkan
nilai x, kita ingin mendapatkan nilai dari apa yang ditunjukkan oleh x.
Jadi sekali lagi, kita harus melakukan de-referensi dan
kemudian kita akan mengalikannya dengan dirinya sendiri. Kami akan melakukan de-referensi dua kali.
Mungkin ide yang bagus untuk memasukkan
ini ke dalam tanda kurung agar sangat mudah dipahami apa yang terjadi di sini.
Anda menghilangkan referensi pointer, mendapatkan nilainya dan kemudian mengalikannya dengan
nilainya dan kemudian Anda hanya menambahkan titik koma, dan hanya
itu yang harus Anda lakukan. Jadi ketika kita menjalankan program ini, itu
akan mencetak 81.
Ini akan mencetak nilai num. Angka akan berubah di dalam kotak karena
kita melewati alamat di sana.
Kami tidak dapat benar-benar mengubah nilai pointer, jadi
kami memiliki konstanta setelah tipe.
Jadi di sini kita katakan build dan
sepertinya kita tidak mengubah deklarasi.
Dan sekarang kami hanya ingin memastikan
bahwa semuanya benar.
Jika Anda ingin penunjuknya konstan, Anda
harus meletakkannya setelah tanda bintang.
Jadi int start constant
berarti Anda tidak dapat mengubah nilai
x, yang merupakan alamat num.
Jika kita menempatkan const sebelum
int atau setelah input sebelum tanda bintang,
itu berarti Anda tidak dapat mengubah nilai yang ditunjuk oleh pointer.
Jadi sekarang ketika kita menjalankan ini kita akan melihat sebagai output 81.
Sekali lagi, ini
memberitahu kita bahwa kita memodifikasi
data. Variabel ini,
jumlah variabel lokal ini telah dimodifikasi di dalam fungsi dan nilainya berubah.
Itu tidak normal. Kami belum mempelajari konsep itu sampai sekarang. Itu lewat referensi.
Tetapi di c apa yang terjadi adalah Anda memberikan salinan alamatnya.
Itulah mengapa ini sangat berlebihan, kami bahkan tidak memerlukan konstanta karena
meskipun kami mengubah nilai pointer, itu adalah
salinan dari nilai pointer, jadi Anda tidak perlu melakukannya.
Sekarang jika kita tidak ingin menggunakan nomor yang sudah ada, kita bisa membuat
pointer, kita hanya perlu mengalokasikan memori untuk itu.
Jadi yang harus kita lakukan di sini adalah kita bisa membuat num bintang int.
Tapi yang harus kita lakukan adalah pertama-tama kita harus membuang malloc
karena malloc kembali dengan pointer kosong
tetapi kita dapat mengalokasikan memori secara dinamis.
Dan di sini, kita harus mengatakan benar-benar
hanya karena kita membuat satu bilangan bulat, kita bisa saja mengatakan ukuran
int dan itu akan mengalokasikan memori untuk kita.
Dan kemudian, yang harus kita lakukan adalah memasukkan bilangan kuadrat.
Dan kemudian ketika
kami membangun ini, itu akan melakukan hal yang
sama tetapi sekarang tidak memiliki nilai untuk
num juga sehingga tidak akan
benar-benar tahu apa yang harus dihitung, jadi Anda
harus benar-benar menetapkan nilai num kami akan mengatakan
di sini empat, Anda de-referensi itu. Dan sekarang ketika Anda membangun dan menjalankannya,
Anda harus mendapatkan 16.
Sekarang satu-satunya hal di sini adalah kita ingin mencetak nilainya, jadi kita ingin mengatakan num.
Dan kemudian ketika kita menjalankannya, kita akan melihat 16.
Dan itu benar-benar jenis perilaku yang sama,
dan kami melihat 16.
Satu-satunya perbedaan di sini adalah kami mengalokasikan memori
untuk titik yang ditunjuk sebagai lawan hanya menunjuk ke lokasi memori
yang ada dengan ampersand.
Sekali lagi, hal penting yang perlu diperhatikan di sini, nomor ini berubah
di luar fungsi. Ini
diteruskan dengan referensi mengerti. Di mana kami menggunakan operator de-referensi,
operator tipuan untuk mendapatkan nilai dari apa yang ditunjuk oleh titik.
Pahami bahwa jika fungsi mengambil pointer dan kita
memiliki pointer, kita bisa mengirimkan namanya.
Jika tidak mengambil pointer dan
itu sebenarnya sebuah nilai, maka kita
harus melakukan de-referensi itu. Dan ini seperti scanf.
Jadi di sini kita harus mengatakan ampersand.
Dan juga saat kita mencetaknya, kita tidak
perlu melakukan de-referensi apapun karena itu bukan pointer dan itu akan
menjadi hal yang sama di sini.
Dan kemudian pahami const dua. Const sebelum bintang int mengatakan
bahwa nilai yang ditunjuk titik tidak dapat berubah.
Const setelah int start mengatakan bahwa alamat pointer tidak bisa, ubah nilai pointer.
Saya harap ini membantu.
Sekali lagi, bermain-main dengan ini, ubah beberapa sintaks, main-main seperti yang saya lakukan.
Ini akan membantu Anda belajar banyak. Terima kasih.