Doug LLOYD: Saat Anda mulai bekerja dengan fungsi,
hal lain akan menjadi benar-benar penting untuk memahami,
yang merupakan konsep ruang lingkup variabel.
Jadi lingkup adalah karakteristik variabel
yang mendefinisikan dari yang berfungsi variabel yang dapat diakses.
>> Ada dua lingkup utama di C, variabel lokal dan variabel global.
Sekarang, variabel lokal hanya bisa diakses dalam fungsi
di mana mereka diciptakan.
Mereka tidak dapat diakses oleh setiap lain fungsi yang ada dalam program Anda,
hanya fungsi di yang diciptakan.
Variabel global, pada sisi lain, dapat diakses
oleh setiap fungsi dalam program ini.
Dan alasan untuk itu adalah karena mereka tidak dibuat di dalam
dari setiap fungsi tertentu.
Kami menyatakan mereka luar semua fungsi, yang
berarti bahwa setiap fungsi yang tahu di mana itu dan dapat mengakses dan memanipulasinya.
>> Sejauh ini dalam kursus Anda sudah cukup banyak telah bekerja secara eksklusif
dengan variabel lokal.
Berikut ini adalah contoh yang sangat-sangat Fungsi utama sederhana dan sangat sederhana
Fungsi tambahan yang sudah kita tulis.
Dalam hal ini, x, yang Aku sudah berwarna hijau hanya
untuk menyoroti wilayah atau ruang lingkup variabel yang,
adalah lokal untuk fungsi tiga.
utama tidak bisa merujuk ke x sama sekali.
Ia tidak tahu apa itu.
Tidak ada fungsi lain, pada kenyataannya, jika kita memiliki fungsi tambahan di sini,
bisa merujuk ke x.
>> Demikian pula, hasil yang saya sudah berwarna biru, adalah lokal hanya untuk main.
Hanya utama yang tahu apa hasil variabel.
tiga tidak bisa menggunakannya.
>> Sekarang seperti yang saya sebutkan, variabel global memang ada.
Jika Anda mendeklarasikan variabel yang di luar fungsi apapun,
semua fungsi dalam Program dapat merujuk ke sana.
Jadi dalam hal ini saya sudah disorot di hijau deklarasi variabel global.
Dalam hal ini, variabel yang dideklarasikan
disebut global, hanya untuk sangat jelas tentang hal itu.
Ini adalah tipe float.
Dan saya menetapkan nilai 0,5050.
>> Anda akan melihat bahwa di utama dan di tiga, saya bisa merujuk ke global.
Dan pada kenyataannya, jika saya pergi melalui program seperti yang ditunjukkan, utama panggilan pertama tiga,
mengalikan tiga global dengan 3, yang set nilainya menjadi 1,5-sesuatu,
1,51 atau sesuatu seperti itu, dan maka utama juga mencetak nilai
dari global.
Jadi utama tidak akan mencetak 0,5050, itu akan mencetak kali 3 global, 1,51.
Jadi, Anda harus berhati-hati saat Anda bekerja dengan variabel global.
Sementara mereka sangat fleksibel dalam mampu menyampaikan informasi
sekitar sehingga setiap Fungsi dapat menggunakannya,
juga dapat memiliki beberapa konsekuensi yang berbahaya
jika perubahan satu fungsi nilai variabel
sebelum Anda berharap untuk diubah.
>> Mengapa perbedaan ini penting?
Mengapa kita peduli apakah beberapa variabel lokal dan lain-lain yang global?
Nah, untuk sebagian besar, variabel lokal di C adalah apa yang disebut melewati nilai
ketika kita membuat panggilan fungsi.
Maksudnya itu apa?
>> Nah, ketika sebuah variabel dilewatkan berdasarkan nilai, callee, yang
adalah cara lain untuk mengatakan fungsi yang menerima variabel yang
akan diteruskan sebagai input, itu benar-benar tidak menerima bahwa variabel itu sendiri.
Menerima sendiri salinan untuk bekerja dengan.
Ini adalah perbedaan yang sangat penting.
Kami hanya melihat kedua lalu bahwa dengan variabel global,
jika kita memanipulasi global variabel dalam satu fungsi, efeknya
dalam satu fungsi membawa melalui setiap fungsi lainnya.
>> Tapi dengan variabel lokal, itu tidak benar.
Setiap fungsi ketika menerima variabel sebagai input
menerima salinan variabel, bukan variabel itu sendiri.
Jadi apa efek samping dari itu?
Itu berarti bahwa variabel dalam pemanggil, fungsi yang
adalah membuat panggilan fungsi, adalah tidak berubah kecuali jika Anda menimpanya.
>> Sebagai contoh, dalam kode ini foo tidak berubah sama sekali.
Int foo sama dengan 4, memanggil tiga dari foo, dalam tiga,
kita harapkan foo yang akan dikalikan dengan 3 dan kembali,
tapi sebenarnya ada tidak berpengaruh.
>> Di sini meskipun, perbedaan yang sangat halus.
Ini memang memiliki efek yang kita inginkan.
Apakah Anda melihat mengapa?
Kami override foo di utama saat ini.
>> Jadi int foo sama dengan 4, foo sama tiga foo, ketika kita membuat panggilan itu,
tiga mendapat salinan sendiri dari foo, salinan sendiri dari 4.
Dikatakan kembali 4 kali 3, atau apa pun variabel akan diteruskan di kali 3.
Dan kemudian kita memberikan pengembalian nilai tiga untuk foo lagi.
Jadi ini benar-benar akan menimpa foo.
Ini adalah satu-satunya cara untuk melakukan ini dengan variabel lokal.
Jadi sekarang jika kita tambahkan lagi baris kode di sini
pada akhir utama mencetak nilai foo,
itu sebenarnya akan mencetak 12.
>> Lingkup variabel umumnya tidak terlalu banyak masalah
jika Anda nama semua Anda variabel hal yang berbeda.
Tapi itu bisa mendapatkan jenis jahat jika nama variabel yang sama
muncul dalam beberapa fungsi, yang akan terjadi banyak.
Jika Anda pernah melakukan pekerjaan di dunia nyata di mana
Anda bekerja pada kolaboratif program dan orang-orang di tim yang berbeda
bekerja sama untuk menulis sama program atau set yang sama program,
mereka akan sering menggunakan kembali variabel nama, yang sangat umum
seperti x, y, i, j, dan sebagainya.
>> Tapi ketika variabel memiliki nama yang sama, masalah lingkup
bisa mendapatkan sedikit rumit untuk mengurai.
Misalnya, apakah Anda tahu apa yang akan dicetak
pada akhir program khusus ini?
Luangkan waktu sebentar.
Jeda video dan membaca melalui program ini.
Anda dapat melihat di atas kita memiliki deklarasi fungsi
untuk fungsi yang disebut kenaikan.
Fungsi yang mengambil satu parameter, integer yang kita sebut x.
Dan itu output integer.
Itulah jenis kembali di awal.
>> Kemudian kita memiliki utama, beberapa baris kode dalam utama, yang terakhir yang
adalah pernyataan cetak.
Dan ingat, itulah pertanyaan di sini.
Apa yang sebenarnya akan menjadi dicetak pada akhir fungsi ini?
Dan kemudian kita benar-benar memiliki definisi selisih bawah.
>> Jadi luangkan waktu sebentar, langkah melalui kode, melacak hal-hal.
Apakah Anda tahu apa yang akan dicetak pada akhir program khusus ini?
>> Baiklah.
Mudah-mudahan, Anda telah mengambil beberapa detik untuk mencoba dan mengurai satu ini.
Mari lakukan bersama.
>> Jadi saya sudah dicoret kenaikan ini deklarasi di atas sana.
Ini adalah jenis gangguan.
Ini bukan variabel sendiri.
Ia tidak memiliki ruang lingkup sendiri.
Ini hanya sebuah fungsi deklarasi, jadi untuk keperluan
mencoba untuk mengurai tahu apa yang terjadi dalam program ini,
kita mungkin juga hanya menghindarinya.
>> Sekarang kita memiliki dalam kasus ini, Alasannya masalah ini rumit
adalah karena kita memiliki variabel lokal di baik utama dan kenaikan, masing-masing
adalah yang disebut x.
Dan tentu saja inti dari masalah ini adalah mencoba untuk memcahkan yang x akan berubah
dan bagaimana cara bisa berubah.
Jadi saya sudah berwarna setiap contoh x yang lokal untuk merah utama.
Dan aku sudah berwarna setiap contoh x yang lokal untuk kenaikan biru.
>> Perhatikan bahwa baris ketiga dari utama, y ​​sama dengan kenaikan
x, kenaikan yang tidak menjadi melewati x utama, atau x merah.
Ini semakin berlalu salinan itu.
Dan itu hanya akan bekerja dengan bahwa salinan itu, biru x.
Jika Anda matematis miring, Anda mungkin
telah bukannya memikirkan ini sebagai x sub m untuk utama dan sub x i untuk peningkatan.
Tapi itu ide yang sama.
x sub m, atau merah x di slide sebelumnya,
adalah variabel yang local-- adalah contoh dari x bukan yang
adalah lokal untuk utama, dan x sub saya, atau variabel biru di slide sebelumnya,
adalah contoh dari x yang lokal untuk kenaikan.
>> Jadi, apakah Anda bisa mencari tahu apa fungsi ini dicetak di akhir?
Aku Doug Lloyd, dan ini adalah CS50.