Halo, dan selamat datang kembali.
Saya ingin memberikan solusi untuk tantangan sebelumnya dalam kuliah ini.
Sebuah demonstrasi tentang bagaimana Anda dapat memiliki pointer sebagai elemen di
dalam struktur dan juga menyebarkan pointer dua fungsi
yang merupakan struktur.
Jadi mari kita memunculkan kode blok, buat proyek baru.
Ini akan menjadi konsol aplikasi, dan kita akan memberi
nama contoh pointer struktur ini.
Dan jadi jika Anda ingat untuk persyaratan
untuk ini, ini pada dasarnya hanya jenis produk struktur yang menyimpan nama barang,
jumlah, harga dan jumlah.
Dan nama itemnya pergi menjadi penunjuk karakter.
Anda akan memiliki jumlah yang pada dasarnya hanya
dikalikan kuantitas harga.
Dan kemudian kami memiliki dua fungsi yang akan digunakan sebagai
parameter pointer ke struct.
Jadi hal pertama yang kita lakukan adalah akan lakukan
adalah kita akan membuat struktur kita.
Dan saya menyebutkan ini sebelumnya, tapi bagus untuk
membuat struktur secara global karena jika Anda mau menggunakannya dalam beberapa fungsi.
Membuat struktur benar-benar mendefinisikannya.
Anda tidak mengalokasikan memori apa pun.
Jadi tidak ada salahnya menempatkannya secara global.
Dan mereka biasanya masuk ke dalam file header lagian.
Jadi untuk membuat struktur, kami hanya mengatakan struct.
Kami akan memanggil item ini, dan kita akan memiliki empat elemen.
Kita akan memiliki karakter pointer, yang akan kita
sebut nama item.
Kita akan memiliki kuantitas.
Kita akan memiliki pelampung untuk harga, dan kita akan
memiliki float untuk jumlahnya.
Dan begitulah cara kita mendefinisikan struktur kami, cukup mendasar.
Sekarang di dalam fungsi utama kita, kita ingin membuat variabel untuk tipe struktur dan
juga pointer.
Jadi hal pertama yang ingin kita lakukan apakah kita hanya ingin mengatakan item struct dengan
nama struktur dan maka kami hanya akan memanggil item ini.
Dan ini hanya membuat pointer aneh.
Ini akan mengalokasikan memori untuk empat variabel dan elemen
di dalam struktur.
Jadi kami ingin membuat pointer kami sekarang, dan kita bisa mengatakan struct item.
Kita akan mengatakan p item karena kita biasanya menamai
pointer kita dengan awalan p.
Jadi kami mengucapkan tanda bintang, dan kami mengatakan p item.
Dan kemudian di baris berikutnya,
kami hanya ingin menetapkan item pointer kami, item kami.
Jadi kita perlu menggunakan alamat dan kami mengatakan item.
Jadi di sini kita memiliki ingatan dialokasikan untuk elemen dalam struktur kami untuk
pointer kami.
Kami tidak memiliki memori dialokasikan untuk penunjuk karakter
kami yang merupakan nama item kami, sehingga menjadi langkah selanjutnya.
Sekarang Anda mungkin bertanya mengapa kita perlu untuk membuat struct item.
Kami tidak benar-benar.
Kami hanya bisa membuat pointer, dan pointer hanya akan membuat memori untuk
pointer item struct itu.
Ini akan mengalokasikan memori untuk int dan
float, tetapi kita masih harus melakukan alokasi nama item.
Saya suka melakukan ini karena ini biasanya praktik yang baik.
Biasanya apa yang akan Anda lakukan dengan struct item pertama adalah Anda
akan menginisialisasinya, jadi Anda akan memiliki beberapa inisialisasi.
Tapi kita tidak perlu melakukan itu.
Jadi hal pertama yang ingin kita lakukan adalah mengalokasikan memori untuk nama item kami.
Jadi pada dasarnya kita dapat menggunakan a operator khusus untuk mengakses elemen jika
itu adalah pointer.
Ingat, untuk struktur yang adalah pointer, Anda memiliki tanda hubung maka lebih besar
dari simbol yang Anda dapat digunakan untuk mengakses elemen.
Jika tidak, Anda harus melakukan de-referensi pointer untuk mengakses elemen.
Kita bisa melakukan sesuatu seperti ini di dalam kurung.
Kita bisa menghilangkan referensi pointer, jadi
kita harus melakukan sesuatu seperti bintang p item dan kemudian menggunakan titik untuk mengakses elemen.
Ini benar-benar valid untuk melakukan sesuatu seperti ini.
Tapi itu semacam sintaks tambahan yang sebenarnya tidak Anda butuhkan.
Jadi c memiliki sintaks khusus yang Anda dapat menggunakan kapan pun struktur Anda
adalah penunjuk jika Anda ingin mengakses elemen.
Anda pada dasarnya hanya bisa mengatakan namanya dari pointer yang merupakan p item dan kemudian gunakan tanda
hubung kemudian lebih besar dari.
Dan dalam hal ini, kami ingin mengalokasikan memori untuk nama item.
Jadi kita akan menetapkan apa itu dikembalikan dari fungsi malloc.
Ingat, fungsi malloc mengembalikan pointer kosong.
Jadi kita harus membuangnya menjadi bintang karakter.
Tapi kita bisa memanggil malloc saja katakan malloc dan kemudian ukuran byte
yang ingin kita buat.
Dalam hal ini, kami hanya akan mengatakan 30, dan kita akan mengalikannya dengan ukuran char, untuk
berjaga-jaga jika char adalah a ukuran yang berbeda pada komputer yang berbeda.
Dan ini akan dialokasikan memori untuk nama item kami.
Kita perlu melakukan ini karena nama item adalah pointer di dalam struktur.
Itu tidak memiliki memori dialokasikan untuk itu ketika
Anda menetapkannya ke struktur lain.
Jadi kita harus melakukan ini.
Sekarang hal pertama yang Anda inginkan yang
harus dilakukan setelah Anda mengalokasikan memori adalah memeriksa malloc.
jadi kami ingin memeriksa nol di sini.
Kami hanya akan mengatakan jika p item, jika itu nol yang akan mengatakan itu nol.
Jika tidak, Anda akan mengatakan jika tidak, Anda bisa katakan saja kembali atau keluar mungkin akan lebih baik, keluar
dari program jika kita tidak dapat mengalokasikan memori dan Anda dapat
meneruskannya ke memori negatif.
Jika tidak, kami ingin membaca di item, jadi kami ingin membuat fungsi.
Fungsi yang akan kita tuju untuk membuat disebut item baca.
Mari kita buat deklarasi fungsi di sini di atas struktur.
Itu hanya akan membaca data ke dalam struct yang kita lewati.
Itu tidak akan mengembalikan data apa pun.
Jadi kita hanya bisa mengatakan read item dan dibutuhkan struct, dan itu akan menjadi
pointer.
Jadi ini adalah item struct, asterisk I.
Sekarang kita bisa membuat ini konstan jadi nilainya berubah,
tapi kita mengubah nilainya.
Tapi kita bisa mengatakan struct konstan, the nilai tidak akan dapat
berubah untuk penunjuk yang ditunjuknya.
Jika kita melakukan konstan setelah tanda bintang, yang akan mengatakan alamat tidak dapat diubah
atau benar sebelum tanda bintang sesuatu seperti itu
setelah nama.
Itu akan mengatakan alamatnya tidak bisa perubahan,
tapi itu berlebihan karena kita melewati nilai salinan.
Kami memiliki item baca kami.
Dan sementara aku di sini, aku mungkin juga melakukan item cetak saya.
Itu hanya akan menjadi fungsinya deklarasi, prototipe fungsi.
Di sini, itu akan menjadi sangat serupa, juga mengambil pointer.
Dapat memiliki ruang jika Anda mau setelah tanda bintang atau tidak?
Sekarang kita dapat mendefinisikan bacaan kita item di bawah metode utama kami.
Dan ini akan membaca dalam nilai item dan kemudian
menghitung jumlah total.
Jadi kita bisa mengatakan batal baca item, memiliki pointer kami.
Dan di dalam sini, kami hanya ingin menggunakan beberapa scanfs benar-benar.
Kami akan mencetak beberapa pesan untuk memberitahu pengguna untuk memasukkan informasi.
Jadi kita akan mengatakan masuk nama produk, dan kemudian kita akan
membacanya.
Jadi kita akan mengatakan scanf, dan kami memiliki pointer ke struct, sehingga kami dapat mengaksesnya
menggunakan tanda hubung maka lebih besar dari.
Kami ingin membaca untuk scanf, the nama produk adalah buffer karakter.
Jadi kami ingin mengatakan persen s dan maka kita akan mengatakan saya, kita akan menyimpannya
dalam nama item.
Dan kita bisa kembali dan menggunakan intellisense hanya pergi ke nama item.
Kita tidak harus menggunakan alamat operator karena itu
adalah penunjuk karakter.
Kami kemudian ingin mencetak dan mendapatkan harga,
mungkin ingin menambahkan beberapa umpan baris di sini, masukkan harga.
Kami akan menyimpan bahwa dalam struktur.
Jadi sekali lagi, harganya mengambang.
Jadi saya akan mengatakan persen f, tapi kami juga akan mengaksesnya karena ini adalah pointer, kami masih ingin
gunakan tanda hubung maka lebih besar dari.
Kecuali kali ini, kita akan katakan harga, dan kita perlu mendapatkan alamatnya, jadi kita
akan letakkan ampersand di depannya karena harga
bukan penunjuk.
Dan kemudian kita akan melakukan hal yang sama untuk kuantitas.
Jadi kuantitas adalah bilangan bulat.
Jadi kita bisa mengatakan persen d, kita masih membutuhkan untuk mendapatkan
alamatnya, tetapi kami ingin menyimpannya di elemen yang berbeda, kami ingin menyimpannya dalam jumlah.
Sekarang kami telah menyimpan atau bertanya pengguna untuk memasukkan
tiga item informasi, sekarang kita bisa sebenarnya menghitung jumlah, disimpan sesuatu
dalam jumlah.
Jumlahnya hanya kuantitas kali harga.
Jadi kami masih ingin mengakses struktur menggunakan sintaks kami, kami
ingin melemparkannya, kami ingin menandatangani kuantitas kali harga.
Dan itulah fungsi item baca.
Mengambil penunjuk struktur.
Jadi ketika kita memodifikasi pointer ini di dalam item baca, itu
akan dimodifikasi di luar fungsinya.
Jadi apapun struktur kita masuk ke fungsi ini, itu
akan dimodifikasi.
Ini akan menyimpan semua item, nama item, harga dan
kuantitas dan jumlah.
Sehingga terbaca dalam data.
Pada titik ini, Anda ingin test dan Anda mungkin ingin
mengkompilasi dan menguji sebelum ini.
Tapi sekarang kita bisa memanggil item yang sudah dibaca metode di utama kami dan menyebarkannya
dalam struktur kami yang kami buat.
Jadi kita bisa mengatakan membaca item, dan kita hanya bisa mengatakan p item.
Kita tidak harus lewat di alamat karena itu adalah pointer,
jadi kami hanya meneruskan struktur kami.
Dan kemudian hal berikutnya kita dapat kita lakukan adalah kita dapat mencetaknya.
Dan apa yang akan ditunjukkan kepada Anda adalah bahwa data disimpan, p
item sedang dimodifikasi di dalam fungsi dan itu disimpan di luar fungsi, fungsi
utama sebenarnya telah menyelamatkan nilai-nilai itu.
Jadi kita bisa mengatakan barang cetak lewat di pointer lagi, dan kemudian kita dapat mendefinisikan fungsi
item cetak.
Item cetak cukup mendasar.
Itu tidak mengembalikan apa pun, jadi kami mengatakan batal dan
kami mengatakan item cetak membutuhkan pointer.
Jadi kami hanya mengatakan struct item star Saya, apa pun yang Anda ingin nama itu.
Dan kemudian kami hanya mencetak data untuk struktur yang dilewati.
Jadi kita akan melakukan sesuatu seperti printf nama persen s, saya nama barang, saya harga,
saya kuantitas dan saya jumlah dan kemudian kami memformat data.
Apa hal terakhir yang kita miliki?
yang harus dilakukan di utama setelah kami mencetak data, fungsi gratis yang sangat penting.
Kami harus menelepon gratis karena kami ingin membebaskan memori yang kami alokasikan
untuk nama item.
Jadi kami hanya bisa mengatakan item p gratis dan kemudian mengakses nama item.
Kami tidak ingin membebaskan seluruh
struktur karena seluruh struktur akan dihapus pada tumpukan ketika fungsi kembali.
Kami hanya ingin membebaskan apa yang kami maloced.
Kami hanya malloced untuk item nama jadi kami membebaskan itu, dan kemudian kami
kembali dari yang utama.
Jadi mari kita lanjutkan dan mencoba untuk membangun ini.
Dan kami memiliki kesalahan.
Mari kita lihat katanya struct item star.
Jadi kami memiliki kesalahan di mana fungsi didefinisikan di atas
struktur.
Tapi fungsi mengambil parameter sebagai tipe struct.
Jadi kita harus memiliki struktur didefinisikan di atas di mana kita menggunakannya.
Jadi saya memindahkan fungsinya ke baris 12 dan 13.
Sekarang kita bisa mengkompilasi.
Mari kita lanjutkan dan jalankan ini.
Dan mari kita lihat apa yang kita dapatkan di sini.
Kami memiliki satu kesalahan lagi.
Anda harus memastikan Anda periksa item p untuk nol.
Jika Anda hanya mengatakan jika p item untuk benar, itu akan selalu benar.
Jadi Anda dapat memeriksa untuk mengatakan itu tidak benar dengan simbol not
yang berarti itu bukan null atau kamu dapat memeriksa untuk melihat apakah itu nol.
Jadi saya baru saja menambahkan nol di sana.
Jadi sekarang kita jalankan, kita harus baik untuk pergi.
Kita bisa memasukkan nama produk.
Kami akan mengatakan serial, dan kami akan katakan harganya 1. 99.
Dan kami akan mengatakan kami memiliki lima di antaranya.
Dan sekarang kami mencetaknya, dan kami katakan serial dolar 99.
5, jumlah totalnya adalah 9. 95.
Harganya meskipun saya tidak suka bagaimana harga dicetak.
Jadi mari kita perbaiki itu.
Di item cetak kami, kami hanya bisa mengatakan untuk harga dor 2 f mengapung, sekarang
kita akan terlihat sedikit lebih baik, dan kita menjalankannya.
Kami akan mendapatkan sedikit sedikit format yang lebih baik.
Empat dari mereka dan sekarang terlihat sedikit lebih baik,
dan semuanya baik-baik saja.
Jadi sekali lagi, program dasar menggunakan struktur dan pointer.
Kami membuat struktur di atas.
Kami memiliki anggota yang berisi pointer, sangat efisien untuk
melakukan itu karena kita bisa cukup salin dan alamat sebagai lawan
dari array karakter.
Kami memiliki dua deklarasi fungsi, baca item cetak item
yang mengambil destruksi pointer.
Dan kemudian kita membuat pointer dan menetapkannya ke struktur reguler
di dalam main.
Kami mengalokasikan memori pada baris 22.
Kami memastikan memorinya adalah dialokasikan berhasil jika tidak kita
keluar dari program.
Dan kemudian kami memanggil kami berdua fungsi yang
membawa pointer ke struktur, meneruskannya.
Dan yang terakhir namun tidak kalah pentingnya, kita mengosongkan memori dan kemudian kita
keluar dari program.
Dan fungsinya adalah cukup mudah.
Anda mengambil penunjuk itu.
Anda mengakses penunjuk menggunakan tanda hubung maka lebih besar dari.
Dan Anda mendapatkan alamat itu untuk scanfs yang tidak
memiliki pointer sebagai elemen.
Dan itu pada dasarnya.
Saya akan menyimpan program ini, Anda melihatnya.
Beri tahu saya jika Anda memiliki pertanyaan. Terima kasih.