Ini
adalah tutorial kesembilan dalam seri Online C Tutorial untuk pemula
dan tentang fungsi, meskipun pada awalnya ditujukan untuk menjadi
sekitar pointer fungsi. Seperti yang telah kita tidak tercakup fungsi, yang akan menjadi sedikit terlalu banyak menempatkan hourse sebelum gerobak.
Tutorial pertama dalam seri adalah C Tutorial Online. Tutorial sebelumnya tentang terkait daftar.
Bertanya-tanya apa C adalah tentang? Membaca profil C.
Ini
adalah penulisan ulang dari tutorial C asli ke halaman gigitan tutorial
ukuran yang biasanya dapat dijalankan di kedua codepad.org atau
ideone.com.Apa Fungsi sebuah?
Fungsi adalah tempat di mana nama kode yang sering digunakan dapat ditempatkan dan kemudian disebut. C
memiliki banyak fungsi, meskipun sebagian besar termasuk dalam
perpustakaan dan Anda harus # mencakup perpustakaan spcific untuk
mendapatkan akses ke fungsi.
Misalnya printf (nilai ...) adalah fungsi yang output nilai yang dikirimkan ke dalamnya ke konsol. Pada dasarnya ada dua jenis fungsi, mereka yang kembali data dan orang-orang seperti printf () yang tidak!
Berikut
ini adalah program yang sangat pendek yang mendefinisikan addTwo
function () yang lewat di dua ints dan mengembalikan mereka.# Include
int addTwo (int a, int b) {
kembali + b;}
int main (int argc, char * argv []){
printf ("% d", addTwo (3,4));
return 0;}
Dua nilai yang berlalu dalam dan mendapatkan disalin ke dalam variabel dan b. Kemudian mereka ditambahkan dan pernyataan kembali memberikan nilai kembali ke kode panggilan. Anda mungkin tidak akan terkejut melihat hasil 7.
Jalankan contoh ini di atas pada ideone.com untuk melihatnya.
Parameter dapat jenis apa pun dan disalin ke penyimpanan lokal. Dengan
fungsi-fungsi C compiler menghasilkan kode yang mengalokasikan ruang
untuk parameter ini pada stack dan kemudian menyalin nilai ke dalam
penyimpanan lokal. Ini disebut Pass-by_value.
apa
artinya bagi Anda adalah bahwa Anda tidak harus membuat fungsi yang
melintas di benda-benda besar seperti struct seperti itu akan disalin
dan itu sangat tidak efisien.
Sebaliknya cara yang lebih baik adalah untuk lulus pointer sebagai gantinya. Ini memiliki dua manfaat:
Ini berarti bahwa hanya pointer disalin, tidak seluruh objek.
Pointer menunjuk ke sebuah variabel hidup yang dapat diubah oleh fungsi.
Berikut adalah contoh yang menunjukkan bagaimana Anda harus berhati-hati dengan pointer. Aku
sudah berubah addTwo (sehingga bukannya menambahkan dua ints yang
berlalu dalam, itu menambah dua ints yang alamat yang lulus masuk
Ingat * berarti alamat yang ditunjuk oleh. Deklarasi di addTwo (int * a memberitahu kita bahwa apapun yang menunjuk ke, harus diperlakukan sebagai int.# Include
int addTwo (int * a, int * b) {
* B + = * a;
(* A) + +;
kembali (* a + b *);}
int main (int argc, char * argv []){
int c = 8;
int d = 11;
int e = addTwo (& c, & d);
printf ("c =% d d =% d e =% d", c, d, e);
return 0;}
Jalankan contoh ini di atas pada ideone.com untuk melihatnya.
* B + = * adalah mudah. The
* Operator jauh lebih tinggi diutamakan daripada + = sehingga
mengevaluasi hal ini sebagai "menambahkan nilai yang ditunjuk oleh
kepada nilai ditunjuk oleh b".
Link ke Urutan Operator Precedence di C.
Kedua pointer int * a dan int * b yang menunjuk ke variabel c dan d, karena addTwo disebut dengan & c dan d &. & C adalah alamat sebenarnya dari variabel C dalam memori.
Jadi secara riil baris * b + = * dalam kasus ini adalah sama seperti d + = c, yaitu menambah nilai c untuk d. Seperti c = 8 dan d = 11, setelah melaksanakan baris ini, d sekarang memiliki nilai 19.Apa (* a) + + artinya?
Mengapa saya tidak ingin hanya melakukan * a + +? Idenya adalah untuk menambahkan satu ke apa yang menunjuk ke, yaitu variabel c. Sayangnya * dan + + adalah tingkat prioritas yang sama, dan kenaikan yang tidak apa yang menunjuk ke. Cobalah dan variabel * a pergi dari memiliki nilai 8 untuk memiliki nilai seperti -858.993.460.
Jadi apa yang baru saja terjadi? Nah bukannya incrementing c (nilai dalam * a), maka bertambah pointer dan kembali apa itu menunjuk ke. Mungkin cara terbaik untuk mengerti ini adalah debug dalam Visual Studio atau GDB dan melihat memori untuk & a.
Menurut jendela penduduk setempat pada PC saya alamat disimpan dalam = 0x002dfd54. Jika Anda melihat delapan byte dimulai pada alamat memori ini, Anda akan melihat:08 00 00 00 cc cc cc cc.
Empat byte pertama membuat int upan dengan nilai = 8, jadi kami akan mencari lokasi dari variabel c dalam memori. Setelah melangkah melalui ini, alamat disimpan dalam telah berubah menjadi 0x002dfd58. Ini telah meningkat sebesar 4 yang khas ketika Anda kenaikan pointer ke int.
Ingat cc cc cc cc? Dalam
Visual Studio Anda dapat mengetikkan 0xcccccccc ke jendela segera dan
melihat nilai yang 3435973836 sebagai nomor ditandatangani. Namun ketik dalam (int) 0xcccccccc untuk melihatnya sebagai nomor ditandatangani -858.993.460. Sekarang kita tahu mana yang datang dari.
Jadi versi singkatnya adalah bahwa * a + + increment pointer sehingga itu tidak lagi menunjuk ke c dan salah. Kita
perlu baik menggunakan yang sangat membingungkan + + * (it karya dan
bertahap apa yang menunjuk ke) atau kurang membingungkan (* a) + +.
Dalam
tutorial berikutnya, saya akan melihat manajemen memori dalam fungsi
dan menunjukkan betapa mudahnya untuk membuat kebocoran memori!
koleksi ilmu hikmah, kisahsufi,tasawuf,fengshui,maulid,desain grafis,batu akik,batu obsidian, paypal pay,za,pendanaan,RENTAL MOBIL proyek,investor,funder,kredit kpr,pinjaman multi guna ,pialang,wali amanat,SEWA MOBIL CIREBONtaxi online cirebondan lain-lain
koleksi ilmu-ilmu hikmah,kisah 2 tokoh sufi.teknologi tips n trik dll
Selasa, Juni 04, 2013
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar
stroom09@gmail.com