Rumah Kewangan Peribadi Array dan penunjuk dalam C ++ - dummies

Array dan penunjuk dalam C ++ - dummies

Video: Array 2 Dimensi, Pointer, dan Struktur bahasa C. Modul VI 2024

Video: Array 2 Dimensi, Pointer, dan Struktur bahasa C. Modul VI 2024
Anonim

Nama array adalah penunjuk kepada array itu sendiri. Arahan adalah urutan pembolehubah yang disimpan dalam memori. Nama array array menunjukkan item pertama.

Ini adalah soalan yang menarik tentang petunjuk: Bolehkah anda mempunyai tajuk fungsi, seperti baris berikut, dan hanya gunakan sizeof untuk menentukan berapa banyak elemen dalam array? Jika ya, fungsi ini tidak perlu mempunyai pemanggil menentukan saiz array.

int AddUp (int Numbers []) {

Perhatikan fungsi ini yang terdapat dalam contoh Array01 dan utama () yang memanggilnya: (int argc, char * argv []) {int MyNumbers [] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; cout << "fungsi luar: Saiz dalam bait adalah"; cout << sizeof (MyNumbers) << endl; ProcessArray (MyNumbers); kembali 0;}

Apabila anda menjalankan aplikasi ini, inilah yang anda lihat:

Fungsi di luar: Saiz dalam bait ialah 40 Fungsi dalam: Saiz dalam bait adalah 4
Di luar fungsi, kod itu mengetahui bahawa saiz array ialah 40 bait. Tetapi mengapa kod tersebut berfikir bahawa saiznya adalah 4 selepas ia berada di dalam array? Alasannya adalah bahawa walaupun kelihatan bahawa anda sedang melewati array, anda benar-benar melewati

penunjuk pada array. Saiz penunjuk hanya 4, dan begitulah cetakan baris cout muktamad.

Pengisytiharan tatasusunan mempunyai sedikit idiosincrasy. Apabila anda mengisytiharkan tatasusunan dengan memberikan bilangan pasti elemen, seperti

int MyNumbers [5];

pengkompil tahu bahawa anda mempunyai tatasusunan, dan operator sizeof memberikan saiz array keseluruhan. Nama array, maka,

kedua penuding dan array! Tetapi jika anda mengisytiharkan tajuk fungsi tanpa saiz array, seperti void ProcessArray (int Numbers []) {

compiler merawat ini sebagai hanya

pointer dan tidak lebih. Garis akhir ini, sebenarnya, bersamaan dengan baris berikut: void ProcessArray (Int * Numbers) {

Oleh itu, di dalam fungsi yang sama ada baris mengisytiharkan, dua baris kod berikut

: Bilangan [3] = 10; * (Bilangan + 3) = 10; Kesamaan ini bermakna bahawa jika anda menggunakan perisytiharan ekstern pada array, seperti

extern int MyNumbers [];

dan kemudian mengambil saiz array ini, pengkompil akan keliru. Contohnya: Jika anda mempunyai dua fail, nombor. cpp dan utama. cpp, di mana nombor. cpp mengisytiharkan pelbagai dan utama. cpp mengeluarkannya secara eksternal (seperti yang ditunjukkan dalam contoh Array02), anda akan mendapat ralat pengompil jika anda memanggil sizeof:

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

Dalam Kod:: Blok, pengkompil gcc memberi kami ralat ini: ralat

: permohonan tidak sah 'sizeof' kepada jenis tidak lengkap int [] '

daripada pelbagai di dalam kurungan.Pastikan saiznya sama seperti fail fail sumber lain! Anda boleh mengeluarkan penyusun dengan menukar nombor, dan anda

tidak akan mendapat ralat

. Tetapi itu adalah gaya pengaturcaraan yang buruk dan hanya meminta kesilapan. Walaupun satu array

adalah sekadar satu pemboleh ubah yang bersebelahan antara satu sama lain dalam ingatan, nama suatu tatasusunan sebenarnya hanya penuding ke elemen pertama dalam array. Anda boleh menggunakan nama itu sebagai penunjuk. Walau bagaimanapun, lakukan hanya apabila anda benar-benar perlu bekerja dengan penuding. Lagipun, anda tidak mempunyai sebab untuk menulis kod yang samar, seperti * (Bilangan + 3) = 10;. Perbualan juga benar. Lihat fungsi ini: void ProcessArray (int * Bilangan) {cout << numbers [1] << endl;}

Fungsi ini mengambil penunjuk sebagai parameter, namun anda mengaksesnya sebagai array. Sekali lagi, jangan tulis kod seperti ini; Sebaliknya, anda harus memahami

mengapa kod seperti ini berfungsi

. Dengan cara itu, anda mendapat pengetahuan yang lebih mendalam mengenai tatasusunan dan bagaimana mereka tinggal di dalam komputer, dan pengetahuan ini pula dapat membantu anda menulis kod yang berfungsi dengan baik. Walaupun nama array hanya penunjuk, nama array integer bukanlah perkara yang sama seperti penuding ke integer. Lihat baris ini kod (didapati dalam contoh Array03): int LotsONumbers [50]; int x; LotsONumbers = & x;

Point the LotsONumbers

pointer

ke sesuatu yang berbeza: sesuatu yang diisytiharkan sebagai integer. Pengkompil tidak membenarkan anda melakukan ini; anda mendapat ralat. Itu tidak akan berlaku jika LotsONumbers diisytiharkan sebagai int * LotsONumbers; maka kod ini akan berfungsi. Tetapi seperti yang tertulis, kod ini memberikan anda ralat pengkompil. Dan percayalah atau tidak, inilah ralat pengomputer yang anda dapatkan dalam Kod:: Blok: ralat: jenis yang tidak serasi dalam tugasan 'int *' ke 'int [50]' Kesalahan ini menunjukkan compiler melihat perbezaan yang jelas antara kedua-dua jenis, int * dan int []. Walau bagaimanapun, nama array sememangnya penunjuk, dan anda boleh menggunakannya sebagai satu; anda tidak boleh melakukan segala-galanya dengannya yang anda boleh dengan penuding biasa, seperti menetapkan semula itu.

Apabila menggunakan tatasusunan, maka ambil perhatian petua berikut. Ini akan membantu anda membuat tatasusunan anda bebas-bug:

Pastikan kod anda konsisten. Jika anda mengisytiharkan, contohnya, penuding ke integer, jangan menganggapnya sebagai array.

Pastikan kod anda jelas dan difahami. Sekiranya anda melewati penunjuk, tidak mengapa untuk mengambil alamat elemen pertama, seperti dalam & (MyNumbers [0]) jika ini menjadikan kod itu lebih jelas - walaupun bersamaan dengan hanya MyNumbers.

  • Apabila anda mengisytiharkan pelbagai, sentiasa cuba memasukkan nombor di dalam kurungan, melainkan anda menulis fungsi yang mengambil array.

  • Apabila anda menggunakan kata kunci ekstern untuk mengisytiharkan array, teruskan dan masukkan saiz seragam di dalam kurungan. Tetapi konsisten! Jangan gunakan nombor satu kali dan nombor yang berbeza masa lain. Cara paling mudah untuk menjadi konsisten ialah menggunakan pemalar, seperti int int ArraySize = 10; dalam fail header umum dan kemudian gunakan dalam pernyataan array anda: int MyArray [ArraySize];.

Array dan penunjuk dalam C ++ - dummies

Pilihan Editor

QuickBooks 2016: Senarai Kod Cukai Jualan, Senarai Kelas dan Senarai Nama Lain -

QuickBooks 2016: Senarai Kod Cukai Jualan, Senarai Kelas dan Senarai Nama Lain -

QuickBooks 2016 menawarkan banyak senarai. Anda mungkin ingin melihat senarai Kod Cukai Jualan, senarai Kelas, dan senarai Nama Lain. Jika anda perlu melihat senarai ini, cuma pilih senarai dari menu Senarai atau pilih Daftar → Senarai Profil Pelanggan & Vendor dan pilih senarai dari submenu yang ...

Perubahan Tarikh cepat - dummies

Perubahan Tarikh cepat - dummies

Ingin memasukkan atau menukar tarikh dalam entri QuickBooks? Memasuki dan mengedit tarikh dalam QuickBooks adalah pantas dan mudah apabila anda menggunakan pintasan keyboard QuickBooks yang sangat berguna ini. QuickBooks Key atau Keystroke Combination Shortcut Results + Next day - Hari Sebelumnya T Hari W Hari Pertama Minggu K Hari terakhir ...

QuickBooks Mematuhi Pesanan Pembelian - dummies

QuickBooks Mematuhi Pesanan Pembelian - dummies

Anda boleh membuat PO QuickBooks walaupun anda memesan barang melalui telefon atau melalui World Wide Web - iaitu, apabila anda tidak meminta barangan secara bertulis. Mengisi pesanan pembelian membolehkan anda menentukan item yang ada pada pesanan dan apabila item tersebut akan tiba. Apa yang anda perlu lakukan ialah bertanya ...

Pilihan Editor

Buat Label dengan Grafik di Word 2016 - dummies

Buat Label dengan Grafik di Word 2016 - dummies

Kata membolehkan anda mencetak helaian label yang serupa, tetapi ia mengandungi hanya teks membosankan. Cuba rempah-rempah dengan menambah warna, fancy, dan pemformatan. Cara terbaik untuk memasak label ialah menambah gambar atau grafik lain. Ikuti langkah berikut: Klik tab Mailings. Dalam kumpulan Buat, klik ...

Cara Mencipta Blok Bangunan AutoTeks dalam Kata 2016 - dummies

Cara Mencipta Blok Bangunan AutoTeks dalam Kata 2016 - dummies

Kata 2016 tidak mempunyai fungsi AutoComplete . Ia telah dikeluarkan beberapa versi yang lalu. Di tempatnya, anda membuat blok bangunan AutoText, yang berfungsi seperti AutoComplete lama. Blok bangunan AutoText ialah pembantu menaip. Anda membuat blok bangunan untuk teks yang sering anda taip, seperti nama, alamat, permintaan maaf, dan sebagainya. ...

Membuat Kad Ucapan di Microsoft Word 2003 - dummies

Membuat Kad Ucapan di Microsoft Word 2003 - dummies

Jika anda ingin membuat sesuatu dalam Word yang hanya akan mempesonakan seseorang, cuba tangan anda pada kad ucapan tersuai. Untuk menyiapkan Word untuk membuat kad ucapan dari satu lembaran kertas bersaiz standard, ikuti langkah-langkah berikut: 1. Pilih Fail -> Persediaan Halaman. 2. Klik tab Margin. 3. Pilih Landskap ...

Pilihan Editor

Cara Menyediakan Pengawal Cari untuk Geocoding dalam App iOS Anda

Cara Menyediakan Pengawal Cari untuk Geocoding dalam App iOS Anda

Anda sudah mempunyai satu teka-teki geocoding di tempat di papan cerita anda untuk apl iOS anda; ini Pengawal Cari yang sesuai bernama. Caranya ialah untuk menambah pengawal peribadi yang akan melaksanakan ciri Cari yang anda mahu. Untuk menambah projek anda, ikuti langkah-langkah berikut: Dalam Navigator Projek, pilih ...

Cara Menyediakan Pengawal Peta di Main_iPad. Storyboard dalam Apl IOS anda - dummies

Cara Menyediakan Pengawal Peta di Main_iPad. Storyboard dalam Apl IOS anda - dummies

Sekali anda mempunyai pengawal paparan peribadi untuk MapController dalam aplikasi iOS anda, anda perlu memberitahu papan cerita iPad untuk memuat pengawal pandangan adat anda dan bukannya UIViewController. Ikuti langkah berikut: Dalam Navigator Projek, pilih Main_iPad. papan cerita dan kemudian pilih Lihat Pengawal di Lihat Pengawal - Adegan Peta dalam Garis Besar Dokumen. ...