Halo, dan selamat datang kembali.
Dalam kuliah ini, saya ingin berbicara tentang mengakses nilai
yang ditunjuk oleh
pointer. Jadi ingat pointer, mereka menyimpan alamat memori.
Alamat memori itu sebenarnya berisi nilai suatu tempat.
Dan pointer menunjuk ke alamat memori itu. Saya ingin mendapatkan nilai dari
apa yang ditunjuknya.
Karena saya hanya akan mencetak nilai pointer yang akan menjadi alamat, tetapi saya ingin mendapatkan alamatnya,
saya ingin mendapatkan nilai alamatnya.
Jadi, Anda dapat mengakses nilai alamat yang ditunjuk oleh
pointer menggunakan operator tipuan. Operator tipuan adalah tanda bintang.
Jadi kita belajar bagaimana menggunakan tanda bintang untuk mendeklarasikan sebuah
pointer, kita juga akan menggunakan tanda bintang untuk menemukan nilai yang ditunjuk oleh sebuah pointer.
Jadi ini juga disebut sebagai operator dereferensi karena
Anda menggunakannya untuk dereferensi sebuah pointer.
Jadi misalnya, jika Anda memiliki angka yang sama dengan 15,
Anda mendeklarasikan pointer bertipe int, menunjuk ke int dan Anda menetapkan alamat angka menggunakan ampersand.
Sekarang bagaimana Anda mendapatkan nilai yang ditunjuk oleh pointer.
Anda dapat melakukan de-referensi.
Pada dasarnya Anda dapat mengetahui nilai yang ditunjuk oleh
pointer adalah nilainya 15 karena itu menunjuk ke alamat angka yaitu 15.
Jadi variabel pointer berisi alamat dari nomor variabel.
Anda dapat menggunakan ini dalam ekspresi untuk menghitung nilai baru untuk hasilnya.
Jadi katakanlah kita ingin melakukan result sama dengan
nilai yang ditunjuk pointer ditambah lima. Anda akan menggunakan tanda
bintang untuk itu sebelum nama pointer.
Jadi apa yang akan dilakukan ini pada dasarnya akan mengatakan apa yang
ditunjuk oleh variabel pointer, itu menunjuk ke 15 tambahkan lima padanya.
Ini adalah alamat
yang ditunjuk oleh pointer ke apa nilai dari alamat itu.
Jadi tanda bintang operator tipuan
yang harus Anda perhatikan juga merupakan simbol yang digunakan untuk perkalian, dan juga
digunakan saat Anda mendeklarasikan tipe pointer. Jadi ini bisa sangat membingungkan.
Bagaimana Anda tahu pasti apa yang terjadi atau bagaimana cara kerja kompiler.
Yah, ini semua tentang konteks. Itu tergantung pada saat Anda menggunakan tanda bintang itu dan di mana Anda menggunakannya.
Jika Anda menggunakan tanda bintang saat Anda mendeklarasikan pointer
tepat setelah
jenis pointer, maka itu jelas menggunakan deklarasi.
Jika Anda menggunakan tanda bintang di antara dua
angka, maka itu digunakan untuk perkalian. Dan jika digunakan
tepat sebelum nama penunjuk di sisi kanan, misalnya, atau sisi
kiri, itu akan menetapkan nilai atau mengakses nilai.
Jadi ini semua tentang konteks ketika Anda menggunakan operator
tipuan ini.
Dan begitulah cara kerjanya.
Jadi begitulah cara kompiler akan menafsirkannya.
Setiap kali Anda melihatnya, contoh ini, penunjuk bintang dan
Anda tidak memiliki tipe data sebelumnya atau Anda tidak memiliki dua
angka di setiap sisi, maka Anda tahu itu adalah penunjuk tidak langsung, dereferensi.
Jadi mari kita lihat sebuah contoh. Berikut adalah contoh
lain di mana kita akan membuat bilangan
bulat yang sama dengan 10. Kami juga akan membuat integer tipe bernama x variabel lain.
Kami menginisialisasi hitungan ke 10, x diinisialisasi ke nol.
Kami kemudian membuat pointer int. Kami tahu ini adalah pointer
int karena kami memiliki tanda bintang setelah tipe
data dan kemudian kami menamakannya int pointer.
Kami sekarang akan menetapkan ke pointer int itu alamat hitungan.
Karena ingat, pointer hanya berisi alamat sebagai nilainya, tetapi mereka
juga menunjuk ke sesuatu.
Jadi kita kemudian dapat menetapkan variabel x apa pun yang ditunjuk oleh
pointer int, berapa nilai alamat yang terkandung dalam pointer.
Jadi x akan benar-benar menampilkan 10.
10. Jadi jika kita melanjutkan dan menampilkan pepatah
hitungan persen d ird x persen ird, hitungan sama dengan 10, x akan sama dengan 10.
Begitulah cara Anda dapat mendereferensikan sebuah pointer dan mendapatkan nilai itu. Ini menunjuk ke jika
Anda ingin menampilkan nilai pointer karena ingat pointer
memiliki nilai dalam memori, itu
hanya sebuah alamat. Jadi bagaimana jika
Anda ingin menampilkan nilai pointer, yang diwakili
oleh bilangan bulat heksadesimal dan alamat?
Nah, Anda bisa menggunakan format specifier persen p. Kami membicarakan hal ini sebelumnya.
Ini akan menampilkan nilai pointer sebagai alamat memori dalam bentuk heksadesimal.
Jadi jika kami melakukan sesuatu seperti
ini di mana, kami mendeklarasikan
nomor kami, kami mendeklarasikan pointer kami, kami menginisialisasi ke nol karena itu praktik yang baik, kami ingin
selalu melakukannya setiap kali Anda tidak menetapkan sesuatu dalam deklarasi ke pointer, buat yakin Anda
menginisialisasi ke null.
Kami kemudian menetapkan variabel nomor kami 10.
Dan kemudian kami menetapkan penunjuk kami ke alamat nomor.
Jadi nilai nomor p sebenarnya akan menjadi alamat.
sebuah alamat. Jadi jika kami mencoba mencetaknya, kami akan menggunakan persen p dan itu akan menjadi nilai alamatnya.
Jika kita ingin mencetak apa yang ditunjuknya, kita
harus melakukan de-referensi menggunakan operator tipuan.
Tetapi ketika Anda mencetak alamat, yang dilakukannya adalah mencetaknya dalam
heksadesimal dan pointer menempati 8 byte dalam
memori, dan alamat memiliki 16
digit heksadesimal. Jadi bagaimana cara kerjanya?
Yah, itu tergantung pada apakah mesin Anda mendukung alamat 64-bit atau 32-bit atau tidak.
Jika mesin Anda memiliki sistem operasi 64-bit, maka
Anda akan melihat 16 digit heksadesimal.
Jika mesin atau OS Anda hanya memiliki pengalamatan
32-bit, maka Anda akan melihat heksadesimal direpresentasikan sebagai 8 digit heksadesimal.
Sekarang bagaimana jika Anda ingin menampilkan alamat.
Anda mungkin mengatakan apa bedanya karena pointer memiliki nilai.
Tetapi Anda juga dapat menampilkan alamat dengan alamat operator.
Jadi dalam contoh ini, kami ingin menampilkan alamat nomor.
Nomor bukan penunjuk. Angka hanyalah bilangan bulat.
Jika kita ingin mendapatkan alamat itu, kita menggunakan ampersand.
Jika kita ingin menampilkan alamat itu, Anda tinggal menggunakan persen p lagi.
Anda hanya menerapkan ampersand.
Jadi jika kita menyediakan ampersand dengan variabel pointer, kita sebenarnya
akan menampilkan alamat pointer itu, bukan
nilai dari titik tersebut. Ingat alamat pointer adalah beberapa alamat di memori.
Nilai pointer adalah alamat yang ditunjuknya.
Dan nilai yang ditunjuknya ada di tempat lain dalam memori.
Jadi ingat ilustrasi di
mana kami menunjukkan cara kerja pointer.
Sebuah pointer, ketika Anda mendeklarasikannya, membuat memori untuk pointer itu,
8 byte.
Nilai dari pointer tersebut adalah sebuah alamat.
Dan apa pun yang ditunjuk oleh
pointer itu adalah sebuah nilai, biasanya dari tipe yang Anda berikan.
Tapi ingat itu, bahwa sebenarnya ada tiga bagian.
Jika Anda ingin mencetak alamat nomor p, Anda kembali akan menggunakan ampersand.
Itu akan menjadi alamat pointer yang sebenarnya.
Dan Anda harus menggunakan bintang kosong untuk menyiasati peringatan.
Jadi ingat, pointer itu sendiri memiliki alamat, sama seperti variabel lainnya,
itu akan dialokasikan saat Anda mendeklarasikannya.
Anda menggunakan persen p sebagai penentu konversi untuk menampilkan alamat.
Anda menggunakan ampersand alamat operator untuk mereferensikan alamat yang
ditempati oleh variabel angka p.
Itu alamat pointernya. Kemudian lagi, pointer memiliki
nilai alamat.
Cast a void adalah untuk mencegah peringatan dari
compiler, khususnya spesifikasi persen p mengharapkan nilainya menjadi semacam tipe pointer.
Tetapi jenis angka ampersand adalah penunjuk ke penunjuk itu.
Jadi Anda harus membuangnya.
Menampilkan jumlah byte yang digunakan pointer.
Cara lain untuk mendapatkan informasi tentang pointer.
Di sini Anda dapat menggunakan operator sizeof. Kami telah belajar tentang ukuran
operator untuk menampilkan byte tipe data yang berbeda. Anda dapat melakukan hal yang sama dengan pointer.
Pada mesin yang saya jalankan, ini akan menempati 8 byte.
Dan alamat mesin memiliki 64 bit karena
ini adalah sistem operasi 64-bit.
Dan Anda mungkin mendapatkan peringatan kompiler saat menggunakan sizeof dengan cara ini, sizet
adalah tipe integer yang ditentukan implementasi.
Untuk mencegah peringatan, Anda bisa memberikan argumen ke tipe int seperti ini.
Jadi yang akan Anda lakukan adalah mengatakan ukuran angka p, persen d byte.
Dan Anda akan mengatakan int, melemparkannya ke nomor p ukuran inci.
Itu akan memberi Anda ukuran penunjuk di memori, ukuran penunjuk alamat itu,
yang, sekali lagi, adalah delapan byte pada kebanyakan sistem.
Karena itu hanya berisi alamat.
Contoh lain di sini. Ini akan menampilkan beberapa hal.
Dan kita akan menjalankan contoh ini untuk menunjukkan hasilnya.
Tapi sebelum kita menjalankannya, saya ingin menjelaskan sedikit apa yang terjadi di sini. Kami memiliki nomor yang dideklarasikan.
Kami memiliki pointer yang menginisialisasi null.
Kami menetapkan nilai angka menjadi 10.
Dan kemudian apa yang ingin kita lakukan
adalah kita ingin mencetak alamat bilangan bulat, dan kita ingin mencetak nilai bilangan,
sangat sederhana, menggunakan alamat operator dan kemudian variabelnya saja.
Ketika kami melakukan alamat operator, kami melakukan persen p.
Kami kemudian akan menetapkan alamat nomor ke pointer kami.
Kami kemudian akan mencetak beberapa informasi pointer.
Kami ingin menampilkan alamat pointer itu sendiri.
Kita bisa menggunakan persen p, tanda bintang batal dan angka.
Kami ingin melihat berapa banyak byte yang dimiliki pointer di memori. Kita dapat mengatakan ukuran.
Kami ingin melihat nilai sebenarnya dari pointer,
yang merupakan alamat. Kami hanya bisa mengatakan nomor p
tanpa informasi tambahan dan kemudian kami menggunakan persen p.
Jika kita ingin melihat nilai yang
ditunjuk pointer, nilai pada alamat, maka kita melakukan
bintang p nomor, kita menggunakan operator tipuan.
Dan kita tahu bahwa angka p menunjuk ke dalam sehingga kita dapat mengatakan persen d.
Jadi mari kita lihat contoh ini di blok kode untuk melihat bagaimana itu sebenarnya ditampilkan.
Apa yang akan kita lihat adalah beberapa angka
heksadesimal untuk alamat setiap kali kita menampilkan alamat dan kita akan melihat nilai dalam kasus lain.
Jadi ini harus terlihat akrab. Ini hanyalah sebuah program
yang menunjukkan kepada Anda cara mengakses berbagai bagian pointer.
Jadi sekali lagi, kami memiliki tipe data nomor biasa int, dan kami
memiliki pointer kami. Kami menginisialisasi ke null.
Pertama-tama kita akan menampilkan nomor kita, yaitu 10. Jadi ini akan menampilkan alamat angka,
dan kemudian akan menampilkan nilai angka pada baris 10 dan 11.
Kami kemudian akan menetapkan pointer kami, alamat nomor.
Jika kita ingin melihat alamat sebenarnya dari pointer kita, kita cukup menggunakan ampersand,
alamat operator, dan kita cast ke void star.
Kami menggunakan persen p.
Jika kita ingin melihat berapa byte pointer dalam memori kita lakukan persen d sizeof.
Jika kita ingin melihat alamat nilai dari pointer pointer, kita lakukan persen p dan
kita sebut saja angka p, karena angka p adalah sebuah alamat.
Jika kita ingin melihat apa yang ditunjuk oleh pointer dengan
nilai alamat yang ada dalam nilai pointer, kita hanya
mengatakan asterisk p number, kita dereferensinya, operator tipuan.
Jadi mari kita jalankan ini.
Ketika saya menjalankan ini, Anda akan melihat dua hal
pertama yang tercetak, alamat nomor yang
ada di baris enam, dan itu beberapa bilangan heksadesimal, 0060ff0c.
Dan ini sebenarnya menjalankan program 32-bit, jadi Anda melihatnya hanya 8
bit.
variabel bilangan yaitu 10.
Kami kemudian mencetak alamat pointer yang sebenarnya ke memori yang dialokasikan.
Ini alamat yang berbeda dari nomor.
Karena ini adalah alamat yang dialokasikan untuk pointer.
Ukuran angka penunjuk adalah 4 byte,
dan itu berarti pengalamatan 32-bit.
Nilai pointer, yang merupakan
alamat nomor, harus sama, dan itu adalah, 0060ff0c.
Dan Anda melihat bahwa Anda sebenarnya bisa mendapatkan
alamat nomor hanya dengan menggunakan nama, penunjuk dengan persen p.
Kami melihat ukuran operator 4 byte.
Jika Anda ingin mendapatkan nilai yang ditunjukkan oleh nomor p
yaitu 10, Anda harus melakukan de-referensi menggunakan operator tipuan dan Anda melihat bahwa itu dicetak 10.
Tapi Anda melihat Anda menggunakan persen p setiap kali
Anda menampilkan alamat, gunakan persen e saat Anda menampilkan nilai pointer integer
atau jumlah byte.
Jadi ini adalah sintaks dasar untuk mengakses nilai pointer.
Alamat pointer, ampersand, nilai
yang ditunjuk oleh titik, nama variabel
saja dan nilai pointer itu sendiri hanya nama variabel,
kemudian nilai yang ditunjuk pointer menggunakan operator tipuan.
Terima kasih. Semoga ini membantu. Pelajari ini, jalankan ini.