koleksi ilmu-ilmu hikmah,kisah 2 tokoh sufi.teknologi tips n trik dll

Selasa, Juni 04, 2013

Lanjutan Pemrograman C Dengan Fungsi

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!

Tidak ada komentar:

Posting Komentar

stroom09@gmail.com

KLINIK CENAYANG STROOM09

KLINIK CENAYANG STROOM09
KLINIK CENAYANG STROOM09

pengunjung

RENTAL MOBIL CIREBON

RENTAL MOBIL CIREBON
RENTAL MOBIL CIREBON,TAXI ONLINE CIREBON,SEWA MOBIL CIREBON MINAT HP/WA :089537731979

Total Tayangan Halaman