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

Array dan Pointer di C ++ - dummies

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

Video: Array, struct, dan Pointer (Hitung nilai mahasiswa) 2024
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

10 Outlook 2013 Jalan pintas layak diambil - dummies

10 Outlook 2013 Jalan pintas layak diambil - dummies

Meskipun komputer dan program perangkat lunak seperti Outlook 2013 seharusnya menyelamatkan Anda waktu, beberapa hari ini sepertinya tidak menjadi masalah. Tombol juggling, kunci, dan Pita sepertinya bisa memakan waktu seharian. Berikut adalah beberapa cara pintas yang bisa menghemat waktu dan ketegangan Anda.

Cara menambahkan kontak di Outlook 2013 - dummies

Cara menambahkan kontak di Outlook 2013 - dummies

Bila bukan apa yang Anda ketahui tapi siapa yang Anda kenal, Anda butuh alat yang bagus untuk mencatat siapa siapa. Outlook 2013 adalah alat yang hebat untuk mengelola nama dan alamat Anda, dan ini mudah digunakan sebagai Buku Hitam Kecil Anda.

Cara menambahkan foto ke kontak Outlook 2013 - dummies

Cara menambahkan foto ke kontak Outlook 2013 - dummies

Anda dapat menyertakan gambar dengan kontak informasi yang Anda kumpulkan di Outlook 2013, dan tidak hanya untuk hiasan. Kini setelah banyak ponsel dan perangkat seluler lainnya melakukan sinkronisasi dengan daftar Kontak Outlook, Anda dapat membuat gambar seseorang muncul di layar ponsel Anda setiap kali dia menelepon atau mengirim SMS. Foto-foto itu ...

Pilihan Editor

Cara Mengatasi Masalah Lingkaran di lingkaran PSAT / NMSQT - dummies

Cara Mengatasi Masalah Lingkaran di lingkaran PSAT / NMSQT - dummies

Ada di mana-mana, terutama di PSAT / NMSQT. Bukan kebetulan bahasa Inggris berisi begitu banyak rujukan ke lingkaran: lingkaran teman, air mengitari cerat, lingkaran penuh, dan sebagainya. Ketika Anda menekan lingkaran pertanyaan pada PSAT / NMSQT, ingat fakta-fakta ini: Jari-jari adalah garis lurus dari pusat lingkaran ...

Meningkatkan Motivasi Anda untuk Dilakukan dengan baik di MAT - dummies

Meningkatkan Motivasi Anda untuk Dilakukan dengan baik di MAT - dummies

Uji Analogi Miller (Miller Analogies Test - MAT) adalah tes standar yang biasanya digunakan untuk penerimaan sekolah pascasarjana, jadi Anda sudah termotivasi untuk melakukannya dengan baik. Sebagai belajar untuk MAT menjadi sulit, memakan waktu, membosankan, atau hanya membosankan, akan sulit untuk mempertahankan motivasi Anda untuk melanjutkan pencarian Anda. Jadi, bagaimana Anda bisa meningkatkan level Anda saat ini?

Pilihan Editor

Bagaimana memberi nama file HTML - dummies

Bagaimana memberi nama file HTML - dummies

Anda tidak dapat membuka kode Anda di browser sampai Anda menyimpan itu dengan perpanjangan nama file. html (atau .htm). Ingat bahwa judul halaman ditampilkan di bilah judul browser atau bilah tab. Judul benar-benar bagaimana halaman Anda "diidentifikasi" ke seluruh dunia. Nama file halaman, meskipun, lebih merupakan bagian dalam ...

Bagaimana Mencocokkan Email Pemasaran dengan Brand Anda - dummies

Bagaimana Mencocokkan Email Pemasaran dengan Brand Anda - dummies

Branding e-mail pemasaran Anda membantu audiens Anda untuk segera mengenali dan membedakan e-mail Anda dari e-mail asing yang mereka terima. Menjaga pencitraan e-mail Anda konsisten dari waktu ke waktu memungkinkan penerima Anda mengenal Anda dan e-mail karena mereka menerima beberapa e-mail dari Anda. Semua komunikasi bisnis Anda harus mengandung elemen pencitraan merek yang konsisten, dan ...