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 2025

Video: Array 2 Dimensi, Pointer, dan Struktur bahasa C. Modul VI 2025
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

Bagaimana Menghubungkan Item Menu ke Kategori di Joomla - dummies

Bagaimana Menghubungkan Item Menu ke Kategori di Joomla - dummies

Untuk artikel yang dikategorikan dalam Joomla untuk dilihat oleh pengguna laman web anda, anda perlu memautkan item menu Joomla anda ke kategori Joomla yang mengandungi artikel yang ingin anda siarkan. Dengan menyambungkan kategori ke item menu, semua artikel dalam kategori boleh didapati melalui item menu yang berkaitan. Untuk membuat ...

Cara Memasang Joomla CMS pada Server Jauh - dummies

Cara Memasang Joomla CMS pada Server Jauh - dummies

Sebaik sahaja anda telah memuatkan fail Joomla yang tidak diturunkan di pelayan jauh dan sediakan MySQL untuk Joomla, anda sudah bersedia untuk memasang Sistem Pengurusan Kandungan Joomla (CMS). Navigasi ke tapak anda di pelayan tuan rumah. Anda melihat halaman pemasangan Joomla pertama. Pilih bahasa. Klik Seterusnya. Semua item dalam pane bahagian atas ...

Cara Membiarkan Pengguna Menguruskan Akaun Sendiri di Joomla - dummies

Cara Membiarkan Pengguna Menguruskan Akaun Sendiri di Joomla - dummies

Walaupun anda boleh mengurus pengguna dari hujung belakang, Joomla menyediakan kemudahan yang baik yang membolehkan pengguna menguruskan diri mereka juga. Anda boleh membuat halaman di mana pengguna boleh mendaftar, log masuk, menetapkan semula kata laluan mereka, diingatkan kata laluan mereka, dan sebagainya. Buat laman pengurusan pengguna Untuk membuat halaman yang membolehkan pengguna mengurus sendiri, anda ...

Pilihan Editor

Pengguna dan Definisi SharePoint berbeza - dummies

Pengguna dan Definisi SharePoint berbeza - dummies

SharePoint mempunyai banyak jenis pengguna yang berbeza, dan bergantung di mana peranan anda sesuai , anda mungkin mempunyai pengalaman yang sangat berbeza dari pengguna SharePoint yang lain. Sebagai contoh, anda mungkin ditugaskan untuk membuat dan mentadbir laman web SharePoint untuk pasukan anda. Dalam kes ini, anda mungkin melihat ke hadapan fungsi yang luas SharePoint ...

Dan Microblog dalam SharePoint - dummies

Dan Microblog dalam SharePoint - dummies

Microblogging dibuat terkenal oleh Twitter. SharePoint 2013 membawa mikroblogging ke dunia korporat. Menggunakan Twitter, anda menghantar mesej ringkas kepada dunia. Anda boleh mengikuti orang lain dan menarik pengikut anda sendiri. Anda menyebut orang lain menggunakan simbol @ yang diikuti dengan nama mereka dan boleh menanda topik menggunakan # ...

Mengeksport Table Akses ke Senarai Dalam Talian SharePoint - dummies

Mengeksport Table Akses ke Senarai Dalam Talian SharePoint - dummies

Jika anda mempunyai meja dalam Akses yang ada pangkalan data yang anda ingin sediakan untuk ahli pasukan anda yang tidak mempunyai aplikasi MS Access 2010, cara terbaik untuk melakukan ini adalah untuk mengeksport jadual tersebut ke dalam senarai SharePoint. Ikuti langkah-langkah berikut: Dari pangkalan data anda, klik kanan pada jadual di ...

Pilihan Editor

Penyediaan aSVAB: Akar - patung

Penyediaan aSVAB: Akar - patung

Menjadi akrab dengan akar untuk ASVAB. Akar adalah kebalikan dari kuasa atau eksponen. Terdapat pelbagai jenis akar tak terhingga. Anda mempunyai akar kuadrat, yang bermaksud "membuang" asas kepada kuasa kedua; akar kubus, yang bermaksud "membuang" asas yang dinaikkan kepada kuasa ketiga; akar yang keempat, untuk ...

ASVAB Penyediaan: Bekerja dengan Perpuluhan - patung

ASVAB Penyediaan: Bekerja dengan Perpuluhan - patung

Anda perlu tahu bagaimana untuk bekerja dengan perpuluhan untuk ASBAB . Perpuluhan adalah kaedah menulis nombor pecahan tanpa menggunakan pengangka dan penyebut. Anda boleh menulis pecahan 7/10 sebagai perpuluhan 0. 7; anda menyebutnya "tujuh persepuluh" atau "titik nol tujuh. "Tempoh atau titik perpuluhan menunjukkan bahawa nombor itu ...

ASVAB Subtest Details - dummies

ASVAB Subtest Details - dummies

Tergantung di mana dan untuk tujuan apa yang anda ambil ujian, anda mungkin menghadapi beberapa versi ASVAB. Versi terkomputer dari ASVAB (CAT-ASVAB) mengandungi sembilan subtest masa yang berasingan. Pada CAT-ASVAB, Maklumat Auto dan Maklumat Kedai dipisahkan kepada dua ujian berbeza, sedangkan mereka digabungkan pada versi kertas. Lihatlah ...