Jenis data dan operasi dalam bahasa C. ungkapan. Jenis data dalam bahasa C

Perbezaan penting antara bahasa SI dan bahasa lain (PL1, FORTRAN, dsb.) ialah ketiadaan prinsip lalai, yang membawa kepada keperluan untuk mengisytiharkan semua pembolehubah yang digunakan dalam program secara eksplisit bersama-sama dengan petunjuk jenis yang sepadan. .

Pengisytiharan pembolehubah mempunyai format berikut:

[memory-class-specifier] type-secifier deskriptor [=initiator] [,descriptor [= initiator] ]...

Deskriptor ialah pengecam pembolehubah mudah atau binaan yang lebih kompleks dengan kurungan segi empat sama, kurungan atau asterisk (satu set asterisk).

Penentu jenis ialah satu atau lebih kata kunci yang mentakrifkan jenis pembolehubah yang diisytiharkan. Bahasa SI mempunyai set jenis data standard, yang mana anda boleh membina jenis data baharu (unik).

Inisiator - menentukan nilai awal atau senarai nilai awal yang diberikan kepada pembolehubah apabila diisytiharkan.

Penentu kelas memori - ditentukan oleh salah satu daripada empat kata kunci SI: auto, luaran, daftar, statik, dan menunjukkan cara memori akan diperuntukkan untuk pembolehubah yang diisytiharkan, di satu pihak, dan, di satu pihak, skop pembolehubah ini, iaitu, dari bahagian mana program itu boleh diakses.

1.2.1 Kategori jenis data

Kata kunci untuk menentukan jenis data asas

Jenis integer: Jenis apungan: char float int double short panjang double long ditandatangani tidak ditandatangani

Pembolehubah dari sebarang jenis boleh diisytiharkan tidak boleh diubah suai. Ini dicapai dengan menambahkan kata kunci const pada penentu jenis. Objek dengan const jenis mewakili data baca sahaja, i.e. pembolehubah ini tidak boleh diberikan nilai baharu. Ambil perhatian bahawa jika tiada penentu jenis selepas perkataan const, maka int penentu jenis adalah tersirat. Jika kata kunci const datang sebelum pengisytiharan jenis komposit (tatasusunan, struktur, campuran, penghitungan), maka ini membawa kepada fakta bahawa setiap elemen juga mesti tidak boleh diubah suai, i.e. ia hanya boleh diberikan nilai sekali.

Konst ganda A=2.128E-2; const B=286; (const int B=286 adalah tersirat)

Contoh pengisytiharan data komposit akan dibincangkan di bawah.

1.2.2. Jenis data integer

Untuk menentukan data jenis integer, pelbagai kata kunci digunakan, yang menentukan julat nilai dan saiz kawasan memori yang diperuntukkan untuk pembolehubah (Jadual 6).

Jadual 6

Ambil perhatian bahawa kata kunci yang ditandatangani dan tidak ditandatangani adalah pilihan. Mereka menunjukkan bagaimana bit sifar pembolehubah yang diisytiharkan ditafsirkan, iaitu, jika kata kunci yang tidak ditandatangani ditentukan, maka bit sifar ditafsirkan sebagai sebahagian daripada nombor, jika tidak, bit sifar ditafsirkan sebagai ditandatangani. Jika kata kunci yang tidak ditandatangani tiada, pembolehubah integer dianggap ditandatangani. Jika penentu jenis terdiri daripada jenis kunci yang ditandatangani atau tidak ditandatangani diikuti dengan pengecam pembolehubah, maka ia akan dianggap sebagai pembolehubah jenis int. Sebagai contoh:

Int tidak ditandatangani n; int b tidak ditandatangani; int c; (ditandatangani int c adalah tersirat); tidak ditandatangani d; (menyiratkan int d yang tidak ditandatangani); ditandatangani f; (ditandatangani int f adalah tersirat).

Ambil perhatian bahawa pengubah jenis char digunakan untuk mewakili aksara (daripada perwakilan tatasusunan aksara) atau untuk mengisytiharkan literal rentetan. Nilai objek char ialah kod 1-bait yang sepadan dengan aksara yang diwakilinya. Untuk mewakili aksara abjad Rusia, pengubah suai jenis pengecam data ialah unsigned char, kerana kod huruf Rusia melebihi nilai 127.

Nota berikut perlu dibuat: bahasa SI tidak mentakrifkan perwakilan memori dan julat nilai untuk pengecam dengan pengubah jenis int dan int yang tidak ditandatangani. Saiz memori untuk pembolehubah dengan pengubah jenis int yang ditandatangani ditentukan oleh panjang perkataan mesin, yang mempunyai saiz yang berbeza pada mesin yang berbeza. Jadi, pada mesin 16-bit saiz perkataan ialah 2 bait, pada mesin 32-bit ia adalah 4 bait, i.e. jenis int adalah bersamaan dengan jenis int pendek atau panjang, bergantung pada seni bina PC yang digunakan. Oleh itu, program yang sama boleh berfungsi dengan betul pada satu komputer dan tidak betul pada komputer yang lain. Untuk menentukan panjang memori yang diduduki oleh pembolehubah, anda boleh menggunakan operator saiz bahasa SI, yang mengembalikan panjang pengubah jenis yang ditentukan.

Sebagai contoh:

A = saiz(int); b = sizeof(long int); c = sizeof(unsigned long); d = saiz(pendek);

Perhatikan juga bahawa pemalar perlapanan dan perenambelasan juga boleh mempunyai pengubah tak bertanda. Ini dicapai dengan menyatakan awalan u atau U selepas pemalar; pemalar tanpa awalan ini dianggap sebagai ditandatangani.

Sebagai contoh:

0xA8C (int ditandatangani); 01786l (ditandatangani panjang); 0xF7u (int tidak ditandatangani);

1.2.3. Data terapung

Untuk pembolehubah yang mewakili nombor titik terapung, pengubah jenis berikut digunakan: float, double, long double (dalam beberapa pelaksanaan bahasa double long tiada SI).

Nilai dengan pengubah jenis apungan mengambil masa 4 bait. Daripada jumlah ini, 1 bait diperuntukkan untuk tanda, 8 bit untuk eksponen berlebihan dan 23 bit untuk mantissa. Ambil perhatian bahawa bit paling ketara bagi mantissa sentiasa 1, jadi ia tidak diisi, jadi julat nilai untuk pembolehubah titik terapung adalah lebih kurang 3.14E-38 hingga 3.14E+38.

Nilai berganda mengambil 8 bit memori. Formatnya serupa dengan format apungan. Bit memori diedarkan seperti berikut: 1 bit untuk tanda, 11 bit untuk eksponen, dan 52 bit untuk mantissa. Dengan mengambil kira bit tinggi mantissa yang ditinggalkan, julat nilai adalah dari 1.7E-308 hingga 1.7E+308.

Terapung f, a, b; ganda x,y;

1.2.4. Papan tanda

Penunjuk ialah alamat memori yang diperuntukkan untuk menampung pengecam (pengecam boleh menjadi nama pembolehubah, tatasusunan, struktur atau rentetan literal). Jika pembolehubah diisytiharkan sebagai penunjuk, maka ia mengandungi alamat memori di mana nilai skalar apa-apa jenis boleh ditemui. Apabila mengisytiharkan pembolehubah jenis penuding, anda mesti menentukan jenis objek data yang alamat pembolehubahnya akan mengandungi, dan nama penuding didahului dengan asterisk (atau kumpulan asterisk). Format pengisytiharan penunjuk:

penentu jenis [ modifier ] * specifier.

Penentu jenis menentukan jenis objek dan boleh menjadi sebarang jenis asas, jenis struktur, campuran (ini akan dibincangkan di bawah). Dengan menyatakan void kata kunci dan bukannya penentu jenis, anda boleh dengan cara yang unik menangguhkan spesifikasi jenis yang dirujuk oleh penuding. Pembolehubah yang diisytiharkan sebagai penunjuk untuk menaip void boleh digunakan untuk merujuk kepada objek dari sebarang jenis. Walau bagaimanapun, untuk dapat melakukan operasi aritmetik dan logik pada penunjuk atau pada objek yang ditunjuknya, adalah perlu untuk menentukan secara eksplisit jenis objek semasa melaksanakan setiap operasi. Takrif jenis sedemikian boleh dibuat menggunakan operasi pemutus jenis.

Kata kunci const, dekat, jauh, besar boleh digunakan sebagai pengubah semasa mengisytiharkan penunjuk. Kata kunci const menunjukkan bahawa penunjuk tidak boleh diubah suai dalam program. Saiz pembolehubah yang diisytiharkan sebagai penunjuk bergantung pada seni bina komputer dan pada model memori yang digunakan untuk program ini akan disusun. Penunjuk kepada jenis data yang berbeza tidak perlu sama panjang.

Untuk mengubah suai saiz penunjuk, anda boleh menggunakan kata kunci dekat, jauh, besar.

Int yang tidak ditandatangani * a; /* pembolehubah a ialah penunjuk untuk menaip unsigned int */ double * x; /* pembolehubah x menunjukkan jenis data titik terapung berketepatan ganda */ char * fuffer ; /* mengisytiharkan penunjuk bernama fuffer yang menunjuk kepada pembolehubah jenis char */ double angka; batal *alamat; alamat = &nomer; (double *)alamat++; /* Pembolehubah alamat diisytiharkan sebagai penunjuk kepada objek dari sebarang jenis. Oleh itu, ia boleh diberikan alamat mana-mana objek (& ialah operasi pengiraan alamat). Walau bagaimanapun, seperti yang dinyatakan di atas, tiada operasi aritmetik boleh dilakukan pada penunjuk melainkan jenis data yang ditunjuknya ditentukan dengan jelas. Ini boleh dilakukan dengan menggunakan operasi hantar (double *) untuk menukar alamat kepada penuding untuk menaip dua kali, dan kemudian menambah alamat. */ const * dr; /* Pembolehubah dr diisytiharkan sebagai penunjuk kepada ungkapan malar, i.e. Nilai penuding boleh berubah semasa pelaksanaan program, tetapi nilai penunjuk itu tidak boleh. */ unsigned char * const w = &obj. /* Pembolehubah w diisytiharkan sebagai penuding malar kepada data aksara yang tidak ditandatangani. Ini bermakna w akan menunjuk ke lokasi memori yang sama sepanjang program. Kandungan kawasan ini boleh diubah. */

1.2.5. Pembolehubah terhitung

Pembolehubah yang boleh mengambil nilai daripada beberapa senarai nilai dipanggil pembolehubah terhitung atau penghitungan.

Pengisytiharan penghitungan bermula dengan kata kunci enum dan mempunyai dua format pembentangan.

Format 1. enum [enum-tag-name] (enum-list) deskriptor[,deskriptor...];

Format 2. enum enum-tag-nama deskriptor [,deskriptor..];

Pengisytiharan penghitungan menentukan jenis pembolehubah penghitungan dan mentakrifkan senarai pemalar bernama dipanggil senarai penghitungan. Nilai setiap nama senarai ialah beberapa integer.

Pembolehubah jenis penghitungan boleh mengambil nilai salah satu pemalar bernama senarai. Pemalar senarai bernama adalah jenis int. Oleh itu, memori yang sepadan dengan pembolehubah penghitungan adalah memori yang diperlukan untuk menampung nilai int.

Pembolehubah jenis enum boleh digunakan dalam ungkapan indeks dan sebagai operan dalam operasi aritmetik dan hubungan.

Dalam format pertama 1, nama dan nilai enum dinyatakan dalam senarai penghitungan. Nama-tag-penghitungan pilihan ialah pengecam yang menamakan teg penghitungan yang ditakrifkan oleh senarai penghitungan. Deskriptor menamakan pembolehubah penghitungan. Lebih daripada satu pembolehubah jenis penghitungan boleh ditentukan dalam pengisytiharan.

Senarai penghitungan mengandungi satu atau lebih binaan borang:

pengecam [= ungkapan malar]

Setiap pengecam menamakan elemen penghitungan. Semua pengecam dalam senarai enum mestilah unik. Jika tiada ungkapan malar, pengecam pertama sepadan dengan nilai 0, pengecam seterusnya dengan nilai 1, dsb. Nama pemalar penghitungan adalah bersamaan dengan nilainya.

Pengecam yang dikaitkan dengan ungkapan malar mengambil nilai yang ditentukan oleh ungkapan malar tersebut. Ungkapan malar mestilah jenis int dan boleh sama ada positif atau negatif. Pengecam seterusnya dalam senarai diberikan nilai ungkapan malar tambah 1 jika pengecam itu tidak mempunyai ungkapan malar sendiri. Penggunaan elemen enumerasi mesti mematuhi peraturan berikut:

1. Pembolehubah mungkin mengandungi nilai pendua.

2. Pengecam dalam senarai penghitungan mesti berbeza daripada semua pengecam lain dalam skop yang sama, termasuk nama pembolehubah biasa dan pengecam daripada senarai penghitungan lain.

3. Nama jenis enum mestilah berbeza daripada nama lain jenis enum, struktur dan campuran dalam skop yang sama.

4. Nilai boleh mengikut elemen terakhir senarai penghitungan.

Minggu enum ( SUB = 0, /* 0 */ VOS = 0, /* 0 */ POND, /* 1 */ VTOR, /* 2 */ SRED, /* 3 */ HETV, /* 4 */ PJAT /* 5 */ ) rab_ned ;

Dalam contoh ini, minggu teg yang boleh dikira diisytiharkan, dengan set nilai yang sepadan dan pembolehubah rab_ned diisytiharkan mengikut jenis minggu.

Format kedua menggunakan nama tag enum untuk merujuk kepada jenis penghitungan yang ditakrifkan di tempat lain. Nama teg penghitungan mesti merujuk kepada teg penghitungan yang telah ditentukan dalam skop semasa. Oleh kerana teg penghitungan diisytiharkan di tempat lain, senarai penghitungan tidak diwakili dalam pengisytiharan.

Dalam mengisytiharkan penunjuk kepada jenis data penghitungan dan mengisytiharkan typedefs untuk jenis penghitungan, anda boleh menggunakan nama teg penghitungan sebelum teg penghitungan itu ditakrifkan. Walau bagaimanapun, definisi enum mesti mendahului sebarang penggunaan penunjuk pengisytiharan typedef kepada jenis. Pengisytiharan tanpa senarai deskriptor seterusnya menerangkan teg, atau, boleh dikatakan, corak penghitungan.

1.2.6. Tatasusunan

Tatasusunan ialah sekumpulan elemen dari jenis yang sama (double, float, int, dll.). Daripada pengisytiharan tatasusunan, pengkompil mesti mendapatkan maklumat tentang jenis elemen tatasusunan dan nombornya. Pengisytiharan tatasusunan mempunyai dua format:

deskriptor penentu jenis [const - expression];

deskriptor penentu jenis ;

Deskriptor ialah pengecam tatasusunan.

Penentu jenis menentukan jenis elemen tatasusunan yang diisytiharkan. Elemen tatasusunan tidak boleh menjadi fungsi atau elemen kosong.

Ungkapan malar dalam kurungan segi empat sama menentukan bilangan elemen dalam tatasusunan. Apabila mengisytiharkan tatasusunan, ungkapan malar boleh ditinggalkan dalam kes berikut:

Apabila diisytiharkan, tatasusunan dimulakan,

Tatasusunan diisytiharkan sebagai parameter formal fungsi,

SI mentakrifkan tatasusunan satu dimensi sahaja, tetapi memandangkan unsur tatasusunan boleh menjadi tatasusunan, tatasusunan berbilang dimensi juga boleh ditakrifkan. Ia diformalkan oleh senarai ungkapan malar mengikut pengecam tatasusunan, dengan setiap ungkapan malar disertakan dalam kurungan segi empat samanya sendiri.

Setiap ungkapan malar dalam kurungan segi empat sama menentukan bilangan elemen sepanjang dimensi tatasusunan itu, supaya pengisytiharan tatasusunan dua dimensi mengandungi dua ungkapan malar, tatasusunan tiga dimensi mengandungi tiga, dan seterusnya. Ambil perhatian bahawa dalam SI, elemen pertama tatasusunan mempunyai indeks 0.

Int a; /* diwakili sebagai matriks a a a a a */ double b; /* vektor 10 elemen jenis double */ int w = ( ( 2, 3, 4 ), ( 3, 4, 8 ), ( 1, 0, 9 ) );

Dalam contoh terakhir, tatasusunan w diisytiharkan. Senarai yang disertakan dalam pendakap kerinting sepadan dengan rentetan tatasusunan; jika tiada pendakap, permulaan tidak akan dilakukan dengan betul.

Dalam bahasa SI, anda boleh menggunakan bahagian tatasusunan, seperti dalam bahasa peringkat tinggi lain (PL1, dll.), Walau bagaimanapun, beberapa sekatan dikenakan ke atas penggunaan bahagian. Bahagian dibentuk dengan menghilangkan satu atau lebih pasangan kurungan segi empat sama. Sepasang kurungan segi empat sama hanya boleh digugurkan dari kanan ke kiri dan secara berurutan. Bahagian tatasusunan digunakan untuk mengatur proses pengiraan dalam fungsi SI yang dibangunkan oleh pengguna.

Jika anda menulis s apabila memanggil fungsi, maka rentetan sifar tatasusunan s akan diluluskan.

Apabila mengakses tatasusunan b, anda boleh menulis, sebagai contoh, b dan vektor empat elemen akan dipindahkan, dan mengakses b akan memberikan tatasusunan dua dimensi bersaiz 3 hingga 4. Anda tidak boleh menulis b, membayangkan bahawa vektor akan dipindahkan, kerana ini tidak mematuhi sekatan yang dikenakan pada bahagian tatasusunan penggunaan.

Contoh pengisytiharan tatasusunan aksara.

char str = "pengisytiharan tatasusunan aksara";

Ambil perhatian bahawa terdapat satu lagi elemen dalam aksara literal, memandangkan elemen terakhir ialah urutan pelarian "\0".

1.2.7. Struktur

Struktur ialah objek komposit yang merangkumi unsur apa-apa jenis, kecuali fungsi. Tidak seperti tatasusunan, yang merupakan objek homogen, struktur boleh menjadi heterogen. Jenis struktur ditentukan oleh kemasukan borang:

struct (senarai definisi)

Sekurang-kurangnya satu komponen mesti dinyatakan dalam struktur. Definisi struktur adalah seperti berikut:

deskriptor jenis data;

di mana jenis data menentukan jenis struktur untuk objek yang ditakrifkan dalam deskriptor. Dalam bentuk yang paling mudah, pemegang ialah pengecam atau tatasusunan.

Struktur ( ganda x,y; ) s1, s2, sm; struct (int year; char moth, day; ) date1, date2;

Pembolehubah s1, s2 ditakrifkan sebagai struktur, setiap satunya terdiri daripada dua komponen x dan y. Pembolehubah sm ditakrifkan sebagai tatasusunan sembilan struktur. Setiap satu daripada dua pembolehubah date1, date2 terdiri daripada tiga komponen tahun, rama-rama, hari. >p>Terdapat cara lain untuk mengaitkan nama dengan jenis struktur, ia berdasarkan penggunaan tag struktur. Teg struktur adalah serupa dengan teg jenis enum. Tag struktur ditakrifkan seperti berikut:

tag struct(senarai penerangan; );

di mana tag ialah pengecam.

Contoh di bawah menerangkan pengecam pelajar sebagai teg struktur:

Pelajar struktur ( nama char; int id, umur; char prp; );

Tag struktur digunakan untuk mengisytiharkan struktur jenis ini dalam bentuk:

teg senarai id struktur;

struct studeut st1,st2;

Penggunaan tag struktur adalah perlu untuk menerangkan struktur rekursif. Berikut membincangkan penggunaan tag struktur rekursif.

Nod struktur ( data int; nod struct * seterusnya; ) st1_node;

Nod tag struktur sememangnya rekursif kerana ia digunakan dalam penerangannya sendiri, i.e. dalam pemformalkan penunjuk seterusnya. Struktur tidak boleh secara langsung rekursif, i.e. struktur nod tidak boleh mengandungi komponen yang merupakan struktur nod, tetapi mana-mana struktur boleh mempunyai komponen yang merupakan penunjuk kepada jenisnya, seperti yang dilakukan dalam contoh di atas.

Komponen struktur diakses dengan menentukan nama struktur dan yang berikut, dipisahkan dengan titik, nama komponen yang dipilih, sebagai contoh:

St1.name="Ivanov"; st2.id=st1.id; st1_node.data=st1.age;

1.2.8. Gabungan (campuran)

Kesatuan adalah serupa dengan struktur, tetapi hanya satu daripada elemen kesatuan boleh digunakan (atau dengan kata lain bertindak balas) pada bila-bila masa. Jenis gabungan boleh ditentukan seperti berikut:

Kesatuan ( huraian unsur 1; ... huraian unsur n; );

Ciri utama kesatuan ialah kawasan memori yang sama diperuntukkan untuk setiap elemen yang diisytiharkan, i.e. mereka bertindih. Walaupun kawasan memori ini boleh diakses menggunakan mana-mana elemen, elemen untuk tujuan ini mesti dipilih supaya hasil yang diperolehi tidak bermakna.

Ahli kesatuan boleh diakses dengan cara yang sama seperti struktur. Teg kesatuan boleh diformalkan dengan cara yang sama seperti teg struktur.

Persatuan digunakan untuk tujuan berikut:

Memulakan objek memori yang digunakan jika pada bila-bila masa hanya satu daripada banyak objek yang aktif;

Tafsirkan perwakilan asas objek daripada satu jenis seolah-olah objek itu diberikan jenis yang berbeza.

Memori yang sepadan dengan pembolehubah jenis kesatuan ditentukan oleh amaun yang diperlukan untuk menampung elemen kesatuan terpanjang. Apabila elemen yang lebih pendek digunakan, pembolehubah jenis kesatuan mungkin mengandungi memori yang tidak digunakan. Semua elemen kesatuan disimpan dalam kawasan memori yang sama, bermula pada alamat yang sama.

Kesatuan (char fio; char addresses; int vozrast; int telefon; ) memaklumkan; kesatuan ( int ax; char al; ) ua;

Apabila menggunakan objek infor jenis kesatuan, anda boleh memproses hanya elemen yang menerima nilai, i.e. Selepas memberikan nilai kepada elemen inform.fio, tiada gunanya mengakses elemen lain. Penggabungan ua membenarkan akses berasingan kepada bait ua.al dan ua.al tinggi bagi nombor dua bait ua.ax .

1.2.9. Medan bit

Elemen struktur boleh menjadi medan bit yang menyediakan akses kepada bit memori individu. Medan bit tidak boleh diisytiharkan di luar struktur. Anda juga tidak boleh menyusun tatasusunan medan bit dan anda tidak boleh menggunakan operasi penentuan alamat pada medan. Secara umum, jenis struktur dengan medan bit ditentukan seperti berikut:

Struct ( pengecam tidak bertanda 1: panjang medan 1; pengecam tidak bertanda 2: panjang medan 2; )

panjang - medan ditentukan oleh ungkapan integer atau pemalar. Pemalar ini menentukan bilangan bit yang diperuntukkan kepada medan yang sepadan. Medan panjang sifar menunjukkan penjajaran ke sempadan perkataan seterusnya.

Struct ( unsigned a1: 1; unsigned a2: 2; unsigned a3: 5; unsigned a4: 2; ) prim;

Struktur medan bit juga boleh mengandungi komponen yang ditandatangani. Komponen sedemikian diletakkan secara automatik pada sempadan perkataan yang sesuai, dan beberapa bit perkataan mungkin kekal tidak digunakan.

1.2.10. Pembolehubah dengan struktur boleh ubah

Selalunya, sesetengah objek program tergolong dalam kelas yang sama, hanya berbeza dalam beberapa butiran. Pertimbangkan, sebagai contoh, perwakilan bentuk geometri. Maklumat am tentang bentuk mungkin termasuk elemen seperti luas, perimeter. Walau bagaimanapun, maklumat dimensi geometri yang sepadan mungkin berbeza bergantung pada bentuknya.

Pertimbangkan contoh di mana maklumat tentang bentuk geometri diwakili berdasarkan penggunaan gabungan struktur dan kesatuan.

Rajah struktur ( dua luas, perimetr; /* komponen biasa */ jenis int; /* atribut komponen */ kesatuan /* pengiraan komponen */ ( jejari dua kali; /* bulatan */ dua kali ganda a; /* segi empat tepat */ dua b ; /* segitiga */ ) geom_rajah; ) rajah1, rajah2 ;

Secara umum, setiap objek rajah akan terdiri daripada tiga komponen: luas, perimeter, jenis. Komponen jenis dipanggil label komponen aktif kerana ia digunakan untuk menunjukkan komponen kesatuan geom_fig yang sedang aktif. Struktur ini dipanggil struktur berubah kerana komponennya berubah bergantung pada nilai label komponen aktif (nilai jenis).

Ambil perhatian bahawa bukannya komponen jenis int, adalah dinasihatkan untuk menggunakan jenis terhitung. Sebagai contoh, seperti ini

Enum angka_catur (BULATAN, KOTAK, SEGITIGA );

Pemalar CIRCLE, BOX, TRIANGLE akan menerima nilai yang sama dengan 0, 1, 2, masing-masing. Pembolehubah jenis boleh diisytiharkan sebagai mempunyai jenis terhitung:

enum angka_catur jenis;

Dalam kes ini, pengkompil SI akan memberi amaran kepada pengaturcara tentang tugasan yang mungkin tersilap, seperti

angka.jenis = 40;

Secara umum, pembolehubah struktur akan terdiri daripada tiga bahagian: satu set komponen biasa, label untuk komponen aktif dan bahagian dengan komponen yang berubah. Bentuk umum struktur pembolehubah adalah seperti berikut:

Struktur (komponen biasa; label komponen aktif; kesatuan (penerangan komponen 1; perihalan komponen 2; ::: perihalan komponen n; ) pengecam kesatuan; ) pengecam struktur;

Contoh mentakrifkan pembolehubah struktur bernama helth_record

Struktur ( /* maklumat am */ nama watak ; /* nama */ umur int; /* umur */ jantina watak; /* jantina */ /* label komponen aktif */ /* (status perkahwinan) */ enum merital_status ins ; /* bahagian berubah-ubah */ kesatuan ( /* bujang */ /* tiada komponen */ struct ( /* berkahwin */ char marripge_date; char spouse_name; int no_children; ) marriage_info; /* bercerai */ char date_divorced; ) marital_info; ) rekod_kesihatan; enum status_perkahwinan ( BUJANG, /* bujang */ MARRIGO, /* berkahwin */ BERCERAI /* bercerai */ );

Anda boleh mengakses komponen struktur menggunakan pautan:

Helth_record.neme, helth_record.ins, helth_record.marriage_info.marriage_date .

1.2.11. Menentukan Objek dan Jenis

Seperti yang dinyatakan di atas, semua pembolehubah yang digunakan dalam program SI mesti diisytiharkan. Jenis pembolehubah yang diisytiharkan bergantung pada kata kunci yang digunakan sebagai penentu jenis dan sama ada penentu ialah pengecam mudah atau gabungan pengecam dengan penunjuk (asterisk), tatasusunan (kurung segi empat sama) atau pengubah suai fungsi (kurung).

Apabila mengisytiharkan pembolehubah ringkas, struktur, campuran atau kesatuan, atau penghitungan, deskriptor ialah pengecam mudah. Untuk mengisytiharkan penunjuk, tatasusunan atau fungsi, pengecam diubah suai dengan sewajarnya: asterisk di sebelah kiri, segi empat sama atau kurungan di sebelah kanan.

Mari kita perhatikan ciri penting bahasa SI: apabila mengisytiharkan, lebih daripada satu pengubah suai boleh digunakan secara serentak, yang memungkinkan untuk mencipta banyak deskriptor jenis kompleks yang berbeza.

Walau bagaimanapun, kita mesti ingat bahawa beberapa kombinasi pengubahsuai tidak boleh diterima:

Elemen tatasusunan tidak boleh menjadi fungsi.

Fungsi tidak boleh mengembalikan tatasusunan atau fungsi.

Apabila memulakan deskriptor kompleks, kurungan segi empat sama dan kurungan (di sebelah kanan pengecam) diutamakan daripada asterisk (di sebelah kiri pengecam). Segi empat sama atau kurungan mempunyai keutamaan yang sama dan dikembangkan dari kiri ke kanan. Penentu jenis dipertimbangkan pada langkah terakhir, apabila deskriptor telah ditafsirkan sepenuhnya. Anda boleh menggunakan kurungan untuk menukar susunan tafsiran mengikut keperluan.

Untuk mentafsir huraian kompleks, satu peraturan mudah dicadangkan yang berbunyi seperti "dari dalam ke luar", dan terdiri daripada empat langkah.

1. Mulakan dengan pengecam dan lihat ke kanan untuk melihat sama ada terdapat segi empat sama atau kurungan.

2. Jika ya, kemudian tafsirkan bahagian deskriptor ini dan kemudian lihat ke kiri untuk mencari asterisk.

3. Jika pada mana-mana peringkat kurungan penutup ditemui di sebelah kanan, maka semua peraturan ini mesti digunakan terlebih dahulu di dalam kurungan dan kemudian tafsiran diteruskan.

4. Mentafsir penentu jenis.

Int * (* comp ) (); 6 5 3 1 2 4

Contoh ini mengisytiharkan pembolehubah comp (1) sebagai tatasusunan sepuluh (2) penunjuk (3) kepada fungsi (4) mengembalikan penunjuk (5) kepada nilai integer (6).

Char * (* (*var) ()) ; 7 6 4 2 1 3 5

Pembolehubah var (1) diisytiharkan sebagai penunjuk (2) kepada fungsi (3) yang mengembalikan penunjuk (4) kepada tatasusunan (5) daripada 10 elemen, yang merupakan penunjuk (6) kepada nilai char.

Selain mengisytiharkan pembolehubah pelbagai jenis, adalah mungkin untuk mengisytiharkan jenis. Ini boleh dilakukan dengan dua cara. Cara pertama ialah dengan menentukan nama teg apabila mengisytiharkan struktur, kesatuan atau penghitungan, dan kemudian menggunakan nama itu dalam pengisytiharan pembolehubah dan fungsi sebagai rujukan kepada teg tersebut. Yang kedua ialah menggunakan kata kunci typedef untuk mengisytiharkan jenis.

Apabila diisytiharkan dengan kata kunci typedef, pengecam sebagai ganti objek yang diterangkan ialah nama jenis data yang sedang dipertimbangkan, dan jenis ini kemudiannya boleh digunakan untuk mengisytiharkan pembolehubah.

Ambil perhatian bahawa sebarang jenis boleh diisytiharkan menggunakan kata kunci typedef, termasuk penunjuk, fungsi atau jenis tatasusunan. Nama dengan kata kunci typedef untuk jenis penunjuk, struktur dan kesatuan boleh diisytiharkan sebelum jenis tersebut ditakrifkan, tetapi dalam skop pengisytihar.

Typedef double(*MATH)(); /* MATH - nama jenis baharu yang mewakili penunjuk kepada fungsi yang mengembalikan nilai berganda */ MATH cos; /* cos penunjuk ke fungsi mengembalikan nilai jenis double */ /* Pengisytiharan yang setara boleh dibuat */ double (* cos)(); typedef char FIO /* FIO - susunan empat puluh aksara */ FIO orang; /* Pembolehubah orang ialah tatasusunan empat puluh aksara */ /* Ini bersamaan dengan pengisytiharan */ char person;

Apabila mengisytiharkan pembolehubah dan jenis, nama jenis (MATH FIO) telah digunakan di sini. Di samping itu, nama jenis boleh digunakan dalam tiga kes lain: dalam senarai parameter formal, dalam pengisytiharan fungsi, dalam operasi tuangan jenis, dan dalam operasi saiz (operasi tuangan jenis).

Nama jenis untuk jenis asas, penghitungan, struktur dan campuran ialah penentu jenis untuk jenis tersebut. Nama jenis untuk penunjuk tatasusunan dan jenis fungsi ditentukan menggunakan deskriptor abstrak seperti berikut:

abstract-descriptor-type-specifier;

Pengendali abstrak ialah pemegang bukan pengecam yang terdiri daripada satu atau lebih penuding, tatasusunan atau pengubah suai fungsi. Pengubah suai penunjuk (*) sentiasa diberikan sebelum pengecam dalam deskriptor, dan tatasusunan dan pengubah fungsi () diberikan selepasnya. Oleh itu, untuk mentafsirkan deskriptor abstrak dengan betul, seseorang mesti memulakan tafsiran dengan pengecam tersirat.

Deskriptor abstrak boleh menjadi rumit. Tanda kurung dalam deskriptor abstrak kompleks menentukan susunan tafsiran dengan cara yang serupa dengan tafsiran deskriptor kompleks dalam pengisytiharan.

1.2.12. Permulaan Data

Apabila pembolehubah diisytiharkan, ia boleh diberikan nilai awal dengan menambahkan pemula kepada pengisytihar. Inisiator bermula dengan tanda "=" dan mempunyai borang berikut.

Format 1: = pemula;

Format 2: = (senarai - pemula);

Format 1 digunakan apabila memulakan pembolehubah jenis dan penunjuk asas, dan format 2 digunakan apabila memulakan objek komposit.

Pembolehubah tol dimulakan dengan aksara "N".

megabut panjang const = (1024 * 1024);

Pembolehubah megabute yang tidak boleh diubah suai dimulakan dengan ungkapan malar yang selepas itu ia tidak boleh diubah.

int statik b = (1,2,3,4);

Tatasusunan dua dimensi nilai b integer dimulakan; elemen tatasusunan diberi nilai daripada senarai. Inisialisasi yang sama boleh dilakukan seperti ini:

int statik b = ( ( 1,2 ), ( 3,4 ) );

Apabila memulakan tatasusunan, anda boleh meninggalkan satu atau lebih dimensi

int statik b - untuk aksara yang ditandatangani

Secara lalai, pembolehubah integer dianggap ditandatangani. Untuk menunjukkan dalam kod bahawa pembolehubah mesti tidak ditandatangani, atribut yang ditandatangani ditambahkan pada jenis asas di sebelah kiri, i.e. tidak ditandatangani:

Nilai panjang yang tidak ditandatangani; // menentukan jenis integer (panjang) tidak bertanda.

Jenis yang disenaraikan hanya berbeza dalam saiz memori yang diperlukan untuk penyimpanan. Oleh kerana bahasa C++ agak bergantung kepada mesin, standard bahasa hanya menjamin keadaan berikut:

  • 1 = saiz char ≤ saiz pendek ≤ saiz int ≤ saiz panjang.

Biasanya saiz jenis adalah seperti berikut: char - 1, short - 2, int - 4, long -8, long long - 8 bait.

Anda boleh melakukan operasi aritmetik dengan nilai jenis integer: +, -, *, /, %; operasi perbandingan: ==, !=,<=, <, >, >=; operasi bit: &, |, xor,<<, >>.
Kebanyakan operasi, seperti penambahan, pendaraban, penolakan dan perbandingan, mudah difahami. Kadangkala, selepas menjalankan operasi aritmetik, hasilnya mungkin berada di luar julat nilai; dalam kes ini program akan menghasilkan ralat.
Pembahagian integer (/) mencari bahagian integer bagi satu integer dibahagikan dengan yang lain. Sebagai contoh:

  • 6 / 4 = 1;
  • 2 / 5 = 0;
  • 8 / 2 = 4.

Simbol peratusan (%) menandakan operasi menentukan baki pembahagian dua integer:

  • 6 % 4 = 2;
  • 10 % 3 = 1.

Operasi yang lebih sukar untuk difahami ialah operasi bitwise: & (DAN), | (ATAU), xor (eksklusif ATAU),<< (побитовый сдвиг влево), >> (anjakan sedikit ke kanan).

Operasi bit AND, OR dan XOR menggunakan operasi logik yang sepadan untuk setiap bit maklumat:

  • 1 10 = 01 2
  • 3 10 = 11 2
  • 1 10 & 3 10 = 01 2 & 11 2 = 01 2
  • 1 10 | 3 10 = 01 2 | 11 2 = 11 2
  • 1 10 xor 3 10 = 01 2 xor 11 2 = 10 2

Dalam pemprosesan imej, 3 saluran digunakan untuk warna: merah, biru dan hijau - ditambah ketelusan, yang disimpan dalam pembolehubah int, kerana setiap saluran mempunyai julat nilai dari 0 hingga 255. Dalam sistem nombor heksadesimal, nilai tertentu ditulis seperti berikut: 0x180013FF; maka nilai 18 16 sepadan dengan saluran merah, 00 16 - biru, 13 16 - hijau, FF - saluran alfa (transparensi). Untuk memilih saluran tertentu daripada integer sedemikian, saluran yang dipanggil digunakan. topeng, di mana kedudukan yang kami minati ialah F 16 atau 1 2. Iaitu, untuk menyerlahkan nilai saluran biru, anda mesti menggunakan topeng, i.e. bitwise DAN:

Int blue_channel = 0x180013FF & 0x00FF0000;

Selepas itu nilai yang terhasil dialihkan ke kanan dengan bilangan bit yang diperlukan.

Anjakan sedikit menganjakkan nombor ke kiri atau kanan dengan seberapa banyak digit binari seperti yang dinyatakan di sebelah kanan operasi. Sebagai contoh, nombor 39 untuk jenis char ditulis dalam binari seperti berikut: 00100111. Kemudian:

Char binaryContoh = 39; // 00100111 char result = binaryContoh<< 2; // сдвигаем 2 бита влево, результат: 10011100

Jika pembolehubah adalah jenis yang tidak ditandatangani, maka hasilnya akan menjadi nombor 156, untuk yang ditandatangani ia adalah sama dengan -100. Ambil perhatian bahawa untuk jenis integer yang ditandatangani, unit dalam bit yang paling ketara bagi perwakilan bit ialah tanda bahawa nombor itu negatif. Dalam kes ini, nilai dalam bentuk binari yang terdiri daripada kesemuanya sepadan dengan -1; jika 1 hanya dalam digit yang paling ketara, dan digit yang tinggal adalah sifar, maka nombor tersebut mempunyai nilai minimum untuk jenis tertentu: untuk char ia ialah -128.

2. Jenis titik terapung (float, double (float))

Set nilai titik terapung ialah subset nombor nyata, tetapi tidak setiap nombor nyata boleh diwakili dalam binari, yang kadangkala membawa kepada ralat bodoh:

Nilai apungan = 0.2; nilai == 0.2; // ralat, nilai di sini tidak akan sama dengan 0.2.

Apabila bekerja dengan pembolehubah titik terapung, pengaturcara tidak seharusnya menggunakan ujian kesamaan atau ketaksamaan; sebaliknya, ujian untuk jatuh dalam selang tertentu biasanya digunakan:

Nilai - 0.2< 1e-6; // ok, подбирать интервал тоже нужно осторожно

Selain operasi perbandingan, jenis titik terapung menyokong 4 operasi aritmetik yang sepadan sepenuhnya dengan operasi matematik dengan nombor nyata.

3. Jenis Boolean (logik) (bool)

Hanya terdiri daripada dua nilai: benar (benar) dan salah (salah). Untuk bekerja dengan pembolehubah jenis ini, operasi logik digunakan: ! (BUKAN), == (kesamaan), != (ketaksamaan), && (logik DAN), || (logik ATAU). Keputusan setiap operasi boleh didapati dalam jadual kebenaran yang sepadan. Sebagai contoh:

X Y XOR0 0 0 0 1 1 1 0 1 1 1 0

4. Jenis aksara (char, wchar_t)

Jenis aksara bukan sahaja jenis integer (biasanya jenis ini dipanggil bait), tetapi juga jenis aksara, menyimpan nombor aksara daripada jadual sebagai aksara ASCII. Sebagai contoh, kod 0x41 sepadan dengan aksara 'A' dan 0x71 - 't'.

Kadangkala terdapat keperluan untuk menggunakan aksara yang tidak ditetapkan dalam jadual ASCII dan oleh itu memerlukan lebih daripada 1 bait untuk penyimpanan. Terdapat watak yang luas untuk mereka (wchar_t).

5.1. Tatasusunan

Tatasusunan membolehkan anda menyimpan set berurutan elemen dari jenis yang sama. Tatasusunan disimpan dalam ingatan sebagai blok bersebelahan, jadi anda tidak boleh mengisytiharkan tatasusunan tanpa menyatakan saiznya. Untuk mengisytiharkan tatasusunan, kurungan segi empat sama () ditulis selepas nama pembolehubah yang menunjukkan saiznya. Sebagai contoh:

Int myArray; // Tatasusunan 5 elemen jenis integer

Untuk memulakan tatasusunan, nilai disenaraikan dalam pendakap kerinting. Anda boleh memulakan dengan cara ini hanya pada masa pengisytiharan berubah. Dengan cara ini, dalam kes ini, tidak perlu menentukan saiz array:

Int odds = (1, 3, 7, 9, 11); // Tatasusunan dimulakan dengan 5 nilai

Untuk mengakses nilai tertentu dalam tatasusunan (elemen tatasusunan), gunakan operasi capaian indeks () yang menunjukkan nombor elemen (nombor bermula dari 0). Sebagai contoh:

Kemungkinan; // akses kepada elemen pertama tatasusunan. Mengembalikan kemungkinan nilai 1; // akses kepada elemen ketiga. Mengembalikan nilai 7 kemungkinan = 13; // Berikan nilai baharu kepada elemen ke-5 bagi kemungkinan tatasusunan; // ralat akses

5.3. rentetan

Untuk menulis rentetan, pengaturcara menggunakan idea bahawa rentetan ialah siri berurutan (tatasusunan) aksara. Untuk mengenal pasti hujung baris, gunakan aksara hujung baris khas: '\0'. Watak istimewa ini, yang terdiri daripada garis miring ke belakang dan watak mengenal pasti, dipanggil watak kawalan atau melarikan diri. Terdapat juga, sebagai contoh, '\n' - permulaan baris baharu, '\t' - penjadualan. Untuk menulis garis miring ke belakang dalam rentetan, escape digunakan - garis miring lain diletakkan sebelum tanda itu sendiri: ‘\’. Melarikan diri juga digunakan untuk menulis tanda petikan.

Mari buat pembolehubah rentetan:

Char textContoh = ('T', 'e', ​​​​'s', 't', '\0'); // rentetan "Ujian" ditulis

Terdapat tatatanda yang dipermudahkan untuk permulaan rentetan:

Char textContoh = "Ujian"; // Aksara terakhir tidak ditulis, tetapi saiznya masih 5

Tanpa pergi ke butiran, berikut ialah satu lagi jenis data yang berguna - rentetan. rentetan
Jenis ini boleh, sebagai contoh, ditambah:

String hello = "Hello,"; nama rentetan = "Maks!"; rentetan hello_name = hello + name; // Dapatkan rentetan "Hello, Max!"

6. Pautan

Int a = 2; // pembolehubah "a" menunjuk kepada nilai 2 int &b = a; // pembolehubah “b” menunjuk ke tempat yang sama dengan “a” b = 4; // dengan menukar nilai b, pengaturcara menukar nilai a. Sekarang a = 4 int & c = 4; // ralat, anda tidak boleh melakukan ini, kerana rujukan tidak boleh diberikan nilai

7. Indeks

Untuk memahami jenis data ini, anda perlu ingat bahawa banyak nilai jenis ini adalah alamat sel memori di mana data bermula. Penunjuk juga menyokong operasi tambah (+), tolak (-) dan nyahrujuk (*).

Alamat 0x0 bermakna penunjuk kosong, i.e. tidak menunjuk kepada sebarang data. Alamat ini mempunyai literalnya sendiri - NULL:

Int *nullPtr = NULL; // penuding nol

Menambah dan menolak alamat dengan integer atau alamat lain membolehkan
bergerak di sekitar memori yang tersedia untuk program.

Operasi mendapatkan semula data bermula pada alamat yang disimpan dalam penunjuk dipanggil dereferencing (*). Program ini membaca bilangan sel memori yang diperlukan dan mengembalikan nilai yang disimpan dalam ingatan.

Int valueInMemory = 2; // tetapkan pembolehubah jenis integer int *somePtr = // salin alamat pembolehubah, di sini & - mengembalikan alamat pembolehubah somePtr; // alamat sel memori, contohnya, 0x2F *somePtr; // nilai disimpan dalam 4 sel: 0x2F, 0x30, 0x31 dan 0x32

Operasi penugasan, yang secara sintaksis sama dengan operasi salin, tidak tersedia untuk penunjuk. Dalam erti kata lain, anda boleh menyalin alamat penuding lain atau alamat pembolehubah, tetapi anda tidak boleh menentukan nilai alamat itu sendiri.

Penunjuk itu sendiri disimpan dalam ingatan, seperti nilai pembolehubah jenis lain, dan menduduki 4 bait, jadi anda boleh membuat penunjuk ke penunjuk.

8. Pemindahan

Penghitungan adalah satu-satunya jenis asas yang ditakrifkan oleh pengaturcara. Pada umumnya, penghitungan ialah set tertib pemalar integer bernama, dengan nama penghitungan ialah jenis asas.

Warna enum (MERAH, BIRU, HIJAU);

Secara lalai, MERAH = 0, BIRU = 1, HIJAU = 2. Oleh itu, nilai-nilai boleh dibandingkan antara satu sama lain, i.e. MERAH< BLUE < GREEN. Программист при объявлении перечисления может самостоятельно задать значения каждой из констант:

Akses enum (BACA = 1, TULIS = 2, EXEC = 4);

Selalunya mudah untuk menggunakan penghitungan yang nilainya adalah kuasa dua, kerana dalam perwakilan binari, nombor yang merupakan kuasa 2 akan terdiri daripada 1 dan sifar. Sebagai contoh:

8 10 = 00001000 2

Hasil penambahan nombor ini bersama-sama sentiasa menunjukkan dengan jelas nombor yang telah ditambah:

37 10 = 00100101 2 = 00000001 2 + 00000100 2 + 00100000 2 = 1 10 + 4 10 + 32 10

batal

Secara sintaksis, jenis lompang tergolong dalam jenis asas, tetapi ia hanya boleh digunakan sebagai sebahagian daripada jenis yang lebih kompleks, kerana Tiada objek jenis void. Biasanya, jenis ini digunakan untuk menunjukkan bahawa fungsi tidak mempunyai nilai pulangan atau sebagai jenis asas penuding kepada objek jenis yang tidak ditentukan:

Objek tidak sah; // ralat, tiada objek jenis void void // ralat, tiada rujukan kepada void void *ptr; // ok, simpan penunjuk kepada jenis yang tidak diketahui

Selalunya kita akan menggunakan void secara khusus untuk menunjukkan bahawa fungsi tidak mengembalikan sebarang nilai. Penunjuk jenis lompang digunakan apabila pengaturcara mengambil tanggungjawab penuh untuk integriti memori dan penghantaran jenis yang betul.

Pelakon

Selalunya perlu untuk menghantar nilai pembolehubah satu jenis kepada yang lain. Dalam kes di mana set nilai jenis asal ialah subset jenis yang lebih besar (contohnya, int ialah subset panjang dan panjang ialah dua kali ganda), pengkompil dapat secara tersirat ( secara tersirat) tukar jenis nilai.

integer = 2; terapung terapung = integer; // terapung = 2.0

Lemparan jenis terbalik akan dilakukan dengan kehilangan maklumat, jadi hanya bahagian integer nombor titik terapung akan kekal, bahagian pecahan akan hilang.

Terdapat kemungkinan penukaran jenis eksplisit; untuk ini, di sebelah kiri pembolehubah atau mana-mana nilai jenis asal, tulis jenis yang pelakon akan dilakukan dalam kurungan:

Nilai int = (int) 2.5;

Operasi unari dan binari

Operasi yang kami lakukan sebelum ini dipanggil binari: di sebelah kiri dan kanan simbol operasi adalah nilai atau pembolehubah, contohnya, 2 + 3. Selain operasi binari, bahasa pengaturcaraan juga menggunakan operasi unari yang digunakan untuk pembolehubah . Mereka boleh terletak sama ada di sebelah kiri atau di sebelah kanan pembolehubah; beberapa operasi sedemikian telah ditemui sebelum ini - operasi penyahrujukan (*) dan mengambil alamat pembolehubah (&) adalah unary. Operator “++” dan “—” masing-masing menambah dan menurunkan nilai pembolehubah integer sebanyak 1, dan boleh ditulis sama ada di sebelah kiri atau di sebelah kanan pembolehubah.

C++ juga menggunakan tatatanda trengkas untuk operasi binari dalam kes apabila bahagian kiri dan kanan ungkapan mengandungi pembolehubah yang sama, i.e. beberapa operasi dilakukan pada nilai pembolehubah dan hasil operasi disimpan dalam pembolehubah yang sama:

A += 2; // sama seperti a = a + 2; b /= 5; // sama seperti b = b / 5; c &= 3; // sama seperti c = c & 3;

Pembolehubah digunakan untuk menyimpan pelbagai data dalam bahasa pengaturcaraan. Pembolehubah ialah kawasan memori yang mempunyai nama, sebaliknya dipanggil pengecam.

Dengan memberikan nama pembolehubah, pengaturcara pada masa yang sama menamakan kawasan memori di mana nilai pembolehubah akan ditulis untuk penyimpanan.

Ia adalah gaya yang baik untuk menamakan pembolehubah dengan bermakna. Ia dibenarkan menggunakan huruf kecil dan besar, nombor dan garis bawah, yang dianggap sebagai huruf dalam C. Aksara pertama mestilah huruf, dan mesti tiada ruang dalam nama pembolehubah. Dalam versi moden penyusun, panjang nama boleh dikatakan tidak terhad. Nama pembolehubah tidak boleh sepadan dengan kata kunci terpelihara. Huruf besar dan huruf kecil dalam nama pembolehubah adalah berbeza, pembolehubah a Dan A- pembolehubah yang berbeza.

Kata Kunci Terpelihara auto double int struct break else long switch register tupedef char extern return void case float unsigned default for signed union do if sizeof volatile continue enum short while
Dalam C, semua pembolehubah mesti diisytiharkan. Ini bermakna, pertama, pada permulaan setiap program atau fungsi anda mesti menyediakan senarai semua pembolehubah yang digunakan, dan kedua, nyatakan jenis setiap pembolehubah.

Apabila pembolehubah diisytiharkan, pengkompil memperuntukkan ruang memori untuknya bergantung pada jenisnya. Menggunakan alat AVR GCC standard, ia berfungsi dengan jenis data char(jenis watak) dan int(jenis integer).

Jenis boleh ubah

Taip char

char- adalah jenis yang paling menjimatkan. Jenis aksara boleh ditandatangani atau tidak ditandatangani. Ditandakan dengan sewajarnya sebagai " char yang ditandatangani" (jenis yang ditandatangani) dan " char yang tidak ditandatangani" (jenis tidak ditandatangani). Jenis yang ditandatangani boleh menyimpan nilai dalam julat dari -128 hingga +127. Tidak ditandatangani - dari 0 hingga 255. Pembolehubah aksara mempunyai 1 bait memori (8 bit).

Kata kunci (pengubah suai) ditandatangani Dan tidak ditandatangani menunjukkan bagaimana bit sifar pembolehubah yang diisytiharkan ditafsirkan, iaitu, jika kata kunci yang tidak ditandatangani ditentukan, maka bit sifar ditafsirkan sebagai sebahagian daripada nombor, jika tidak, bit sifar ditafsirkan sebagai ditandatangani.

Taip int

Nilai integer int Mungkin pendek(pendek) atau panjang(panjang).

Kata kunci (pengubah suai) pendek diletakkan selepas kata kunci ditandatangani atau tidak ditandatangani. Oleh itu, jenis berikut dibezakan: int pendek yang ditandatangani, int pendek yang tidak ditandatangani, int panjang yang ditandatangani, int panjang yang tidak ditandatangani.

Jenis pembolehubah int pendek yang ditandatangani(integer pendek yang ditandatangani) boleh mengambil nilai dari -32768 hingga +32767, int pendek tidak ditandatangani(integer pendek tidak ditandatangani) - dari 0 hingga 65535. Tepat dua bait memori (16 bit) diperuntukkan untuk setiap bait.

Apabila mengisytiharkan pembolehubah jenis int pendek yang ditandatangani kata kunci ditandatangani Dan pendek boleh ditinggalkan, dan jenis pembolehubah sedemikian boleh diisytiharkan dengan mudah int. Ia juga mungkin untuk mengisytiharkan jenis ini dengan satu kata kunci pendek.

Pembolehubah int pendek tidak ditandatangani boleh diisytiharkan sebagai int yang tidak ditandatangani atau pendek tidak ditandatangani.

Untuk setiap saiz ditandatangani int panjang atau int panjang yang tidak ditandatangani 4 bait memori diperuntukkan (32 bit). Nilai pembolehubah jenis ini boleh berada dalam julat dari -2147483648 hingga 2147483647 dan dari 0 hingga 4294967295, masing-masing.

Terdapat juga pembolehubah seperti panjang panjang int, yang mana 8 bait memori diperuntukkan (64 bit). Mereka juga boleh ditandatangani atau tidak ditandatangani. Untuk jenis yang ditandatangani, julat nilai adalah dari -9223372036854775808 hingga 9223372036854775807, untuk jenis yang tidak ditandatangani - dari 0 hingga 18446744073709551615. Jenis yang ditandatangani boleh diisytiharkan secara ringkas dengan dua kata kunci lama lama.

taip Julat Julat heks Saiz
char yang tidak ditandatangani 0 ... 255 0x00...0xFF 8 bit
char yang ditandatangani
atau secara ringkas
char
-128 ... 127 -0x80...0x7F 8 bit
int pendek tidak ditandatangani
atau secara ringkas
int yang tidak ditandatangani atau pendek tidak ditandatangani
0 ... 65535 0x0000 ... 0xFFFF 16 bit
int pendek yang ditandatangani atau ditandatangani int
atau secara ringkas
pendek atau int
-32768 ... 32767 0x8000...0x7FFF 16 bit
int panjang yang tidak ditandatangani
atau secara ringkas
panjang tidak ditandatangani
0 ... 4294967295 0x00000000 ... 0xFFFFFFFF 32 bit
ditandatangani panjang
atau secara ringkas
panjang
-2147483648 ... 2147483647 0x80000000 ... 0x7FFFFFFF 32 bit
tak bertanda panjang panjang 0 ... 18446744073709551615 0x0000000000000000 ... 0xFFFFFFFFFFFFFFFFFF 64 bit
ditandatangani panjang panjang
atau secara ringkas
lama lama
-9223372036854775808 ... 9223372036854775807 0x8000000000000000 ... 0x7FFFFFFFFFFFFFFF 64 bit

Pembolehubah diisytiharkan dalam pernyataan pengisytiharan. Pernyataan pengisytiharan terdiri daripada spesifikasi jenis dan senarai nama pembolehubah yang dipisahkan koma. Mesti ada koma bertitik di hujungnya.

Pengisytiharan pembolehubah mempunyai format berikut:

[modifiers] type_specifier identifier [, identifier] ...

Pengubah suai- kata kunci ditandatangani, tidak ditandatangani, pendek, panjang.
Penentu jenis- kata kunci char atau int, yang menentukan jenis pembolehubah yang diisytiharkan.
Pengecam- nama pembolehubah.

Contoh: char x; int a, b, c; tidak ditandatangani panjang panjang y;
Dengan cara ini pembolehubah akan diisytiharkan x, a, b, c, y. Kepada pembolehubah x ia akan menjadi mungkin untuk menulis nilai dari -128 hingga 127. Dalam pembolehubah a, b, c- dari -32768 hingga +32767. Kepada pembolehubah y- dari 0 hingga 18446744073709551615.

Memulakan nilai pembolehubah semasa pengisytiharan

Apabila diisytiharkan, pembolehubah boleh dimulakan, iaitu, diberikan nilai awal. Anda boleh melakukan ini seperti berikut. int x = 100; Oleh itu, ke dalam pembolehubah x Apabila diumumkan, nombor 100 akan segera ditulis.

Adalah lebih baik untuk mengelak daripada mencampurkan pembolehubah yang dimulakan dalam satu pernyataan pengisytiharan, iaitu, adalah lebih baik untuk mengisytiharkan pembolehubah yang dimulakan pada baris yang berasingan.

Pemalar

Pembolehubah dari sebarang jenis boleh diisytiharkan tidak boleh diubah suai. Ini dicapai dengan menambah kata kunci const kepada penentu jenis. Pembolehubah dengan jenis const ialah data baca sahaja, bermakna pembolehubah tidak boleh diberikan nilai baharu. Jika selepas perkataan const Jika tiada penentu jenis, maka pemalar dianggap sebagai nilai yang ditandatangani dan diberikan jenis int atau int panjang mengikut nilai pemalar: jika pemalar kurang daripada 32768, maka ia diberikan jenis int, jika tidak int panjang.

Contoh: const long int k = 25; const m = -50; // const int tersirat m=-50 const n = 100000; // const long tersirat int n=100000

Tugasan

Tanda "=" digunakan untuk tugasan dalam C. Ungkapan di sebelah kanan tanda tugasan dinilai, dan nilai yang terhasil diberikan kepada pembolehubah di sebelah kiri tanda tugasan. Dalam kes ini, nilai sebelumnya yang disimpan dalam pembolehubah dipadamkan dan digantikan dengan yang baharu.

Pengendali "=" tidak sepatutnya difahami sebagai kesaksamaan.
Sebagai contoh, ungkapan a = 5; hendaklah dibaca sebagai "tetapkan pembolehubah a kepada 5".

Contoh: x = 5 + 3; // tambah nilai 5 dan 3, // tetapkan hasilnya kepada pembolehubah x (tulis kepada pembolehubah x) b = a + 4; // tambah 4 pada nilai yang disimpan dalam pembolehubah a, // tetapkan hasil yang terhasil kepada pembolehubah b (tulis kepada pembolehubah b) b = b + 2; // tambah 2 pada nilai yang disimpan dalam pembolehubah b, // tetapkan hasil yang terhasil kepada pembolehubah b (tulis kepada pembolehubah b)
Di sebelah kanan, nilai pembolehubah boleh digunakan beberapa kali: c = b * b + 3 * b;

Contoh: x = 3; // pembolehubah x akan diberikan nilai 3 y = x + 5; // nombor 5 akan ditambah kepada nilai yang disimpan dalam pembolehubah x, // keputusan yang terhasil akan ditulis kepada pembolehubah y z = x * y; // nilai pembolehubah x dan y akan didarab, // hasilnya akan ditulis kepada pembolehubah z z = z - 1; // 1 akan ditolak daripada nilai yang disimpan dalam pembolehubah z // hasilnya akan ditulis kepada pembolehubah z
Oleh itu, dalam pembolehubah z nombor 23 akan disimpan

Sebagai tambahan kepada pengendali tugasan mudah "=", terdapat beberapa lagi pengendali tugasan gabungan dalam C: "+=", "-=", "*=
Contoh: x += y; // sama seperti x = x + y; - tambah x dan y // dan tuliskan hasilnya kepada pembolehubah x x -= y; // sama seperti x = x - y; - tolak nilai y daripada x // dan tulis hasilnya kepada pembolehubah x x *= y; // sama seperti x = x * y; - darab x dengan y // dan tulis hasilnya kepada pembolehubah x x /= y; // sama seperti x = x / y; - bahagikan x dengan y // dan tuliskan hasilnya kepada pembolehubah x x %= y; // sama seperti x = x % y; // hitung baki integer apabila membahagikan x dengan y // dan tulis hasilnya kepada pembolehubah x

Kenaikan dan penurunan

Jika anda perlu menukar nilai pembolehubah kepada 1, kemudian gunakan kenaikan atau penurunan.

Kenaikan- operasi meningkatkan nilai yang disimpan dalam pembolehubah sebanyak 1.

Contoh: x++; // nilai pembolehubah x akan dinaikkan sebanyak 1$WinAVR = ($_GET["avr"]); if($WinAVR) include($WinAVR);?>
Penurunan- operasi mengurangkan nilai yang disimpan dalam pembolehubah sebanyak 1.

Contoh: x--; // nilai pembolehubah x akan dikurangkan sebanyak 1
Kenaikan dan pengurangan adalah pengendali tugasan. Apabila menggunakan penyusutan dan kenaikan bersama-sama dengan pengendali tugasan "=", gunakan tatatanda postfix (x++) atau awalan (++x). Entri awalan dilaksanakan terlebih dahulu.

Contoh: y = x++;
Mari kita anggap bahawa dalam pembolehubah x nilai 5 telah disimpan. Kemudian masuk y nilai 5 akan ditulis, selepas itu nilai pembolehubah x akan meningkat sebanyak 1. Oleh itu, dalam y akan menjadi 5, dan dalam x- 6. y = --x;
Jika dalam x Jika nilai 5 disimpan, maka pengurangan akan dilakukan terlebih dahulu x kepada 4 dan kemudian nilai ini akan diberikan kepada pembolehubah y. Oleh itu, x Dan y akan diberikan nilai 4.