Rumah Keuangan Pribadi Array dan Pointer di C ++ - dummies

Array dan Pointer di C ++ - dummies

Video: Array, struct, dan Pointer (Hitung nilai mahasiswa) 2025

Video: Array, struct, dan Pointer (Hitung nilai mahasiswa) 2025
Anonim

Nama array adalah pointer ke array itu sendiri.. array adalah urutan variabel yang tersimpan dalam memori. Nama array menunjuk ke item pertama.

Ini adalah pertanyaan menarik tentang petunjuk: Dapatkah Anda memiliki header fungsi, seperti baris berikut, dan cukup gunakan sizeof untuk menentukan berapa banyak elemen dalam array? Jika demikian, fungsi ini tidak perlu pemanggil menentukan ukuran array.

int AddUp (int Numbers []) {

Pertimbangkan fungsi ini yang ditemukan pada contoh Array01 dan main () yang memanggilnya:

void ProcessArray (int Numbers []) { cout << "di dalam fungsi: Ukuran dalam byte adalah" << sizeof (Bilangan) << endl;} int main (int argc, char * argv []) {int MyNumbers [] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; cout << "fungsi luar: Ukuran dalam bytes adalah"; cout << sizeof (MyNumbers) << endl; ProcessArray (MyNumbers); kembali 0;}

Saat menjalankan aplikasi ini, inilah yang Anda lihat:

Fungsi luar: Ukuran byte adalah 40 Fungsi di dalam: Ukuran dalam byte adalah 4

Di luar fungsinya, kode mengetahui bahwa ukuran array adalah 40 byte. Tapi mengapa kode berpikir bahwa ukurannya adalah 4 setelah berada di dalam array? Alasannya adalah bahwa meskipun tampaknya Anda melewati sebuah array, Anda benar-benar melewati pointer ke sebuah array. Ukuran pointer hanya 4, dan itulah yang dicetak cout akhir.

Mendeklarasikan array memiliki sedikit keistimewaan. Ketika Anda mendeklarasikan sebuah array dengan memberikan sejumlah elemen tertentu, seperti

int MyNumbers [5];

kompilator mengetahui bahwa Anda memiliki sebuah array, dan operator sizeof memberi Anda ukuran keseluruhan array. Nama array, kemudian, adalah dua pointer dan sebuah array! Tapi jika Anda mendeklarasikan header fungsi tanpa ukuran array, seperti

void ProcessArray (int Numbers []) {

compiler memperlakukan ini hanya sebagai pointer dan tidak lebih dari itu. Baris terakhir ini, sebenarnya sama dengan baris berikut:

void ProcessArray (int * Bilangan) {

Jadi, di dalam fungsi yang ditunjukkan oleh kedua baris, dua baris kode berikut setara <: Angka [3] = 10; * (Angka + 3) = 10;

Kesetaraan ini berarti bahwa jika Anda menggunakan deklarasi extern pada sebuah array, seperti

extern int MyNumbers [];

dan kemudian mengambil ukuran dari array ini, compiler akan menjadi bingung. Inilah contohnya: Jika Anda memiliki dua file, angka. cpp dan main cpp, di mana angka cpp mendeklarasikan sebuah array dan main. cpp secara eksternal menyatakannya (seperti yang ditunjukkan pada contoh Array02), Anda akan mendapatkan kesalahan kompilator jika Anda memanggil sizeof:

#include using namespace std; extern int MyNumbers []; int main (int argc, char * argv []) {cout << sizeof (MyNumbers) << endl; return 0;}

In Code:: Blocks, compiler gcc memberi kita kesalahan ini:

error: aplikasi yang tidak valid 'sizeof' ke tipe incomplete 'int []'

Solusinya adalah dengan meletakkan ukuran dari array di dalam kurung.Pastikan ukurannya sama seperti pada file kode sumber lainnya! Anda bisa memalsukan kompilator dengan mengganti nomornya, dan

Anda tidak akan mendapatkan error . Tapi itu gaya pemrograman yang buruk dan hanya meminta kesalahan. Meskipun

array hanyalah sekumpulan variabel yang berdekatan satu sama lain dalam memori, nama dari sebuah array benar-benar hanya sebuah pointer ke elemen pertama dalam array. Anda bisa menggunakan nama sebagai pointer. Namun, lakukan itu hanya bila Anda benar-benar perlu bekerja dengan pointer. Setelah semua, Anda benar-benar tidak memiliki alasan untuk menulis kode yang samar, seperti * (Bilangan + 3) = 10;. Kebalikannya juga benar. Lihatlah fungsi ini:

void ProcessArray (int * Numbers) {cout << numbers [1] << endl;}

Fungsi ini mengambil pointer sebagai parameter, namun Anda mengaksesnya sebagai array. Sekali lagi, jangan menulis kode seperti ini; Sebagai gantinya, Anda harus mengerti

mengapa kode seperti ini bekerja . Dengan begitu, Anda mendapatkan pengetahuan tentang array yang lebih dalam dan bagaimana mereka tinggal di dalam komputer, dan pengetahuan ini, pada gilirannya, dapat membantu Anda menulis kode yang sesuai. Meskipun, nama array hanyalah sebuah penunjuk, nama dari array bilangan bulat bukanlah hal yang sama persis dengan pointer ke integer. Lihat baris kode ini (temukan di contoh Array03):

int Lotsonumbers [50]; int x; Lotsonumbers = & x;

Arahkan angka loton

ke sesuatu yang berbeda: sesuatu dinyatakan sebagai bilangan bulat. Kompilator tidak membiarkan Anda melakukan ini; kamu mendapat error Itu tidak akan terjadi jika banyak orang dinyatakan sebagai int * Lotsons; maka kode ini akan berhasil. Tapi seperti ditulis, kode ini memberi Anda kesalahan kompilator. Dan percayalah atau tidak, inilah kesalahan kompilator yang Anda dapatkan di Code:: Blocks: error: tipe yang tidak kompatibel dalam penugasan 'int *' ke 'int [50]' Kesalahan ini menyiratkan kompilator tidak melihat Perbedaan yang pasti antara dua tipe, int * dan int []. Namun demikian, nama array memang pointer, dan Anda bisa menggunakannya sebagai satu; Anda tidak bisa melakukan semuanya dengan itu yang bisa Anda lakukan dengan pointer normal, seperti menugaskannya kembali.

Bila menggunakan array, perhatikan tip berikut. Ini akan membantu Anda menjaga bug bebas bug Anda:

Jaga agar kode Anda tetap konsisten. Jika Anda menyatakan, misalnya, pointer ke integer, jangan memperlakukannya sebagai array.

Jaga agar kode Anda jelas dan mudah dipahami. Jika Anda melewatkan petunjuk, tidak masalah untuk mengambil alamat elemen pertama, seperti di & (MyNumbers [0]) jika kode ini lebih jelas - meskipun hanya setara dengan MyNumbers.

  • Bila Anda mendeklarasikan sebuah array, selalu mencoba memasukkan nomor di dalam kurung, kecuali jika Anda menulis sebuah fungsi yang membutuhkan sebuah array.

  • Bila Anda menggunakan kata kunci extern untuk mendeklarasikan sebuah array, maju dan juga letakkan ukuran array di dalam tanda kurung. Tapi konsisten! Jangan gunakan satu nomor satu kali dan nomor yang berbeda lain kali. Cara termudah untuk konsisten adalah dengan menggunakan konstanta, seperti const int ArraySize = 10; dalam file header yang umum dan kemudian menggunakannya dalam deklarasi array Anda: int MyArray [ArraySize];.

Array dan Pointer di C ++ - dummies

Pilihan Editor

Kantor 2011 untuk Mac: Membuat Tabel dengan Kotak Dialog atau Teks - dummies

Kantor 2011 untuk Mac: Membuat Tabel dengan Kotak Dialog atau Teks - dummies

Sementara ada cara baru untuk membuat tabel di Office 2011 untuk Mac, Anda masih bisa menggunakan teknik stand-by. Menu yang familiar masih bekerja di Office 2011 untuk Mac, dan inilah buktinya. Dialog meja semuanya masih ada di sana: Di Word, pilih Table → Insert → Table; Sebagai alternatif, pada tab Tabel Ribbon, di Tabel Pilihan ...

Kantor 2011 untuk Mac: Melepaskan Command Toolbar - dummies

Kantor 2011 untuk Mac: Melepaskan Command Toolbar - dummies

Apakah Anda menggunakan Office 2011 untuk Mac atau Produk Microsoft Office lainnya, toolbar Anda bisa sangat berantakan. Setiap kali Anda merasa perlu untuk men-tweak antarmuka aplikasi Microsoft Office, Anda perlu memanggil dialog Customize Toolbars and Menus. Ini adalah dialog super kuat di Word, Excel, dan PowerPoint yang memungkinkan Anda ...

Kantor 2011 untuk Mac: Berbagi Toolbar dan Menu - dummies

Kantor 2011 untuk Mac: Berbagi Toolbar dan Menu - dummies

Setelah Anda menyesuaikan Office 2011 Anda bilah alat dan antarmuka, Anda dapat berbagi penyesuaian dengan orang lain. Namun, pastikan bahwa Anda menasihati orang-orang yang telah Anda lakukan sebelum membagikan dokumen Anda dengannya; Jika tidak, mereka mungkin akan terkejut saat mereka membuka dokumen Anda dan melihat susunan toolbar atau menu yang berbeda dari pada apa ...

Pilihan Editor

Penting Office 2007 Commands - dummies

Penting Office 2007 Commands - dummies

Anda dapat membuat program Office 2007 lebih mudah jika Anda menggunakan pintasan sederhana ini. Perintah-perintah ini, seperti mengurungkan kesalahan dan memperbesar dan memperkecil akan membantu Anda menghemat waktu. Memasuki simbol: Untuk memasukkan simbol atau karakter asing yang tidak ada pada keyboard Anda, masuk ke tab Insert dan klik Symbol ...

Menyesuaikan Perintah Menu di Office 2003 - dummies

Menyesuaikan Perintah Menu di Office 2003 - dummies

Office 2003 menyediakan dua teknik untuk menyesuaikan menu dan perintah menu. Anda bisa memulai dari kotak dialog Rearrange Commands atau menggunakan metode drag-and-drop. Teruslah membaca. Menangani perintah menu di kotak dialog Rearrange Commands Teknik tombol Options Toolbar untuk menangani tombol toolbar bagus dan keren, tapi bagaimana jika Anda ingin ...

Pilihan Editor

Bagaimana memecahkan kesalahan logis dalam analisis argumen Pertanyaan GRE - dummies

Bagaimana memecahkan kesalahan logis dalam analisis argumen Pertanyaan GRE - dummies

Ketika Anda menjawab Argument Analysis Pertanyaan di GRE, argumen mungkin tampak logis dan adil di permukaan tapi sebenarnya keliru (keliru, cacat). Alasan melingkar, penalaran sebab-akibat yang keliru, dan generalisasi sweeping adalah tiga tanda argumen lemah. Dengan melihat beberapa kesalahan logis yang lebih umum, Anda dapat mengidentifikasi kelemahan dalam argumen dan ...

Pilihan ganda, Beberapa Jawaban tentang Tes Matematika GRE - Pertanyaan Praktik - dummies

Pilihan ganda, Beberapa Jawaban tentang Tes Matematika GRE - Pertanyaan Praktik - dummies

Meskipun pertanyaan matematika biasanya hanya memiliki satu jawaban yang benar, ini tidak selalu terjadi. Akibatnya, beberapa pertanyaan pilihan ganda pada tes GRE Math akan memberi Anda daftar jawaban dan meminta Anda untuk memilih lebih dari satu. Pertanyaan praktik berikut meminta Anda untuk menemukan nilai kemungkinan yang berbeda secara berurutan dan ...

Pilihan ganda, Beberapa Jawaban tentang Tes Verbal GRE - Pertanyaan Praktik - dummies

Pilihan ganda, Beberapa Jawaban tentang Tes Verbal GRE - Pertanyaan Praktik - dummies

Pada tes GRE Verbal, beberapa pertanyaan pilihan ganda akan memiliki lebih dari satu jawaban yang benar. Untuk pertanyaan ini, Anda akan diminta untuk melihat-lihat pilihan jawaban dan memilih semua yang menurut Anda benar. Dalam pertanyaan praktik berikut, Anda diminta untuk membaca bagian yang disertakan, dan kemudian ...