Dize sabitleri. Karakter ve dize sabitleri

  • 21.07.2019

Sabit, sabit (değişmez) bir nesnenin görüntüsü olan dil alfabesinin sınırlı bir sembol dizisidir.

Sabitler sayısal, karakter ve dizedir. Sayısal sabitler tamsayı ve gerçek olarak ikiye ayrılır.

Tamsayı Sabitleri

C'deki tamsayı verileri aşağıdaki sayı sistemlerinden birinde temsil edilebilir:


İkili veri gösterim sistemi, C dilinde doğrudan desteklenmez. Ancak, bir bayt içindeki ikili sabitleri tanımlayan binary.h dosyasını kullanabilirsiniz.

C dilinde ikili sayı sistemini kullanma örneği:

1
2
3
4
5
6
7
8
9

#Dahil etmek
#include "binary.h"
int ana()
{
işaretsiz karakter p = b10001001 | b00001010; // p=b10001011=139
printf("p = %dd = %xh", p, p);
getchar(); getchar();
0 döndür;
}

Yürütme sonucu

Bir tamsayı sabitinin değerine bağlı olarak, derleyici ona bir tür veya başka bir tür atar (char , int , long int ).

U (veya u ) son ekini kullanarak, bir tamsayı sabitini işaretsiz bir tamsayı olarak temsil edebilirsiniz.

Örneğin, Sabit 200U'ya 1 bayt tahsis edilir ve en önemli bit, sayı kodunun basamaklarından birini temsil etmek için kullanılır ve değer aralığı 0 ile 255 arasında olur. L (veya l ) soneki, bir tamsayı sabitine ( long int ) 8 bayt ayırmanıza izin verir.

U (veya u ) ve L (veya l ) son eklerinin herhangi bir sırada kullanılması, bir tamsayı sabitinin unsigned long int türünde olmasına ve kod bitini (işaret bitini değil) temsil etmek için kullanılan işaret bitiyle birlikte 64 bit bellek kaplamasına izin verir. ).

Gerçek Sabitler

Bir kayan nokta sabiti (gerçek bir sabit) her zaman çift duyarlıklı bir kayan noktalı sayı olarak temsil edilir, yani double türüne sahip olarak ve aşağıdaki bölümlerden oluşur:

  • tamsayı kısmı - bir sayı dizisi;
  • noktalar - tamsayı ve kesirli bölümlerin ayırıcısı;
  • kesirli kısım - bir sayı dizisi;
  • üs karakteri e veya E ;
  • üs bir tamsayı sabiti olarak (imzalı olabilir).

Aşağıdaki çiftlerin herhangi bir kısmı (ancak ikisi birden değil) atlanabilir:

  • tamsayı veya kesirli kısım;
  • nokta veya sembol e (E ) ve bir tamsayı sabiti olarak üs.

Gerçek sabitlere örnekler

  • 3.14159
  • 2.1E5
  • .123ЕЗ
  • 4037e-5

Varsayılan olarak, derleyici double türünü gerçek bir sayıya atar. Programcı, derleyicinin bir sabite atadığı türden memnun değilse, tür, aşağıdaki son ekler kullanılarak sabit gösterimde açıkça belirtilebilir:

  • F (veya f ) - basit gerçek sabitler için yüzer,
  • L (veya l ), ​​genişletilmiş çift duyarlıklı gerçek sabitler için uzun bir çifttir.

Örnekler:

  • 3.14159F - kayan nokta tipi sabit, 4 bayt kaplar;
  • 3.14L, 10 bayt kaplayan long double türünde bir sabittir.

sembolik sabitler

Bir karakter sabiti tek bir karakterdir, örneğin: 'z' . Grafik gösterimi olmayan kontrol kodları, sembolik sabitler olarak da kullanılabilir. Bu durumda, kontrol karakter kodu '\' (ters eğik çizgi) karakteriyle başlar.

Tipik olarak, bir tuşa basmak Giriş aynı anda iki kontrol karakteri oluşturur - satır besleme (0x0A) ve satır başı (0x0D).

Tüm karakter sabitleri char türündedir ve bellekte 1 bayt yer kaplar. Sembolik bir sabitin değeri, dahili kodunun sayısal değeridir.

dize sabitleri

Bir dize sabiti, tırnak içine alınmış bir karakter dizisidir, örneğin:

"Bu bir dize sabitidir"

Alıntılar dizeye dahil edilmez, ancak yalnızca onu sınırlandırır. Teknik olarak, bir dize sabiti bir karakter dizisidir ve bu temelde C dilinin karmaşık bir nesnesi olarak sınıflandırılabilir.

Her dize sabitinin sonuna, derleyici bir '\0' (boş karakter) koyar, böylece program dizenin sonunu belirleyebilir. Bu gösterim, bir dizi sabitinin boyutunun herhangi bir sınırla sınırlı olmadığı, ancak bir dizi sabitinin uzunluğunu belirlemek için tamamen taranması gerektiği anlamına gelir.

Bir dize sabiti karakterlerden oluştuğundan, char türündedir. Bir dize sabitini depolamak için gereken bellek hücrelerinin sayısı, içindeki karakter sayısından 1 fazladır (bir boş karakter depolamak için 1 bayt kullanılır).

Karakter sabiti 'x' ve tek karakter dizisi 'x' aynı şey değildir. Karakter sabiti, x harfini sayısal olarak temsil etmek için kullanılan karakterdir, "x" dize sabiti ise 'x' karakterini ve '\0' boş karakterini içerir ve bellekte 2 bayt yer kaplar. Programda dizi sabitleri ayırıcılar aracılığıyla birbiri ardına yazılırsa, program yürütüldüğünde ardışık bellek hücrelerine yerleştirilecektir.

Laboratuvar #1

C++ programlama diline giriş

Amaç:

1. Visual C++ kabuk arayüzünü öğrenmek;

2. Yürütülebilir dosyaları derlemek ve oluşturmak.

3. C++ dilinin ana veri tiplerini incelemek;

Temel veri türleri;

Değişkenler ve sabitler;

4. Öğrenme operatörleri:

Aritmetik;

Mantıklı;

Karşılaştırmalar;

bit düzeyinde;

giriş ve çıkış.

5. ISP Microsoft Visual C++ 5.0'da çalışma becerilerinin kazanılması.

Kullanılmış ekipman:

IBM PC ile uyumlu kişisel bilgisayar.

Kullanılan yazılım:

Windows işletim sistemi;

Microsoft Visual C++ 5.0 Tümleşik Programlama Ortamı (Microsoft Visual C++ 5.0 ISP).

İş ataması

1.1. UI Microsoft Visual C++ 5.0'ı indirin.

1.2. Microsoft Visual C++ 5.0 COI komutlarını öğrenin.

1.3. Microsoft Visual C++ 5.0 ISP'nin temel veri türlerini öğrenin.

1.4. Örnek 1, örnek 2, örnek 3 ve öğretmenin görevini çalıştırın.

1.5. Entegre ortamla çalışma protokolünü kaydedin.

İş emri

2.1. Microsoft Visual C++ 5.0'ı başlatın.

2.2. Çalışma dizininde *.cpp dosyası oluşturun.

2.3. Örnek 1, örnek 2, örnek 3 ve öğretmenin görevini çalıştırın.

2.4. Bir algoritma şeması çizin ve bir program yazın (öğretmenin talimatlarına göre). Entegre ortamla çalışma protokolünü kaydedin.

2.5. Microsoft Visual C++ 5.0 ile çalışmayı bitirin ve programı çalıştırın.

3.1. Laboratuvar çalışmasının adı.

3.2. Amaç.

3.3. teorik kısım.

3.4. Yürütülen programların algoritmaları.

3.5. Yürütülen programların metni.

3.6. Çıktı.

Kısa iş tanımı

4.1. ISP Microsoft Visual C++ 5.0'da başlatın ve çalışın.

Microsoft Visual C++ 5.0 ISP'yi çalıştırmak için Başlat menüsü - Microsoft Visual C++ 5.0 - Microsoft Visual C++ 5.0'ı başlatmanız gerekir.

C++'da çalışmaya başlamak için önce basit bir konsol uygulaması oluşturmanız gerekir, bunun için şu adımları izlemeniz gerekir:

Ø Visual C++'ı başlatın (Start®Programs® Microsoft Visual C++ 5.0.® Microsoft Visual C++ 5.0 . );

Ø "Dosya" menüsünden "Yeni"yi seçiniz. "Yeni" iletişim kutusunda "Projeler" sekmesinin seçili olduğundan emin olun. Proje türleri listesinden "Win32 Konsol Uygulaması"nı seçin;

Ø “Location” projesinin dizinini (C:\students\’group*) ve “Proje adı” projesinin adını seçin, örneğin “First” ve “OK” butonuna tıklayın. "Birinci sınıflara" sahip olacaksınız;

Ø Bundan sonra tekrar "New" seçeneğini seçiniz ancak "Files" sekmesi ile "C++ Source File" seçeneğini seçiniz. "Dosya adı" listesinde bir ad girin, örneğin "İlk" Ardından "Tamam"ı tıklayın ve "First.cpp" dosyası oluşturulacaktır.

Programın genel yapısı.

Görevimiz, C / C ++ ile yazılmış bir programın genel yapısını, yani tüm kaynak metinleri tek bir dosyaya yerleştirmektir:

Ø Önişlemci yönergelerinin alanı (dahil et, tanımla..);

Ø Özel veri türlerinin açıklaması;

Ø Eksik fonksiyon bildirimleri;

Ø Global değişkenlerin tanımı;

Ø Fonksiyon bildirimi 1;

Ø Fonksiyon bildirimi 2;

Ø Main() işlev bildirimi.

Bu şema Pascal'daki gibi katı bir düzene sahip değildir, ancak geleneksel olarak kabul edilir.

Bir program, geleneksel olarak işlevler olarak adlandırılan bir veya daha fazla prosedürden oluşur. Herhangi bir programda zorunlu olan bir işleve main adı verilmelidir. Programa giriş noktası görevi görür ve ardından diğer işlevleri çağırır.

Minimum program şöyle görünür:

Void ana(void)

Hiçbir parametre alıp döndürmeyen (void) bir ana fonksiyondan oluşur. Kıvrımlı parantezler içine alınmış fonksiyon gövdesi de herhangi bir kullanışlı operatör içermez.

Değişkenler hem fonksiyon gövdesi içinde hem de gövde dışında bildirilebilir. İlk durumda, yalnızca verilen işlevin gövdesinden (yerel bildirimler) ve ikinci durumda herhangi bir işlevden (genel bildirimler) erişilebilirler.

Programın yürütülmesi, komut satırından bir dizi değer alabilen ana işlevin gövdesi ile başlar. main öğesinin gövdesi, hem standart kitaplıklardan hem de program metninde kullanıcı tarafından tanımlananlardan diğer işlevlere yapılan çağrıları içerir.

Programın yürütülmesi, ana sona erdiğinde varsayılan olarak sona erer, ancak kritik bir hata olması durumunda veya aksi belirtilmedikçe herhangi bir noktada sona erebilir. Bu genellikle stdlib kitaplığındaki exit() işlevi kullanılarak yapılır.

Ekrana bir dize yazdırma

Öncelikle ekrana string yazdıran bir program yazalım.

Program, main() adında bir fonksiyon içermelidir. Programın başlangıcındaki rolüyle tanınır. Bu işlev çevirmen tarafından önceden tanımlanmamıştır, aşırı yüklenemez ve türü uygulamaya bağlıdır. Ana fonksiyon şu şekilde tanımlanabilir:

Örnek 1:

// İlk C++ programı

#Dahil etmek

geçersiz ana()

cout<< “Thise is my first program\n” << endl;

Bir programı çalıştırmak için önce onu kaydetmeniz gerekir. Menüye git dosya ve orada tıklayın Hepsini kaydet. Ardından onu oluşturmanız (derlemeniz) gerekir, bunun için aşağıdaki adımları uygulamanız gerekir:

Ø Menüye gidin ( Build®Build*.exe) veya bir klavye kısayolu (F7), program oluşturma başlayacaktır. Derleyici, aşağıda görünen pencerede görülebilecek bir hata mesajı vermediyse, programı güvenle çalıştırabilirsiniz;

Ø Şimdi sadece programı çalıştırmanız gerekiyor, bunun için menüye gidin ( Build®Execute *.exe.) veya klavye kısayolu (Ctrl+F5);

Ø Programınız çalışıyor.

Astar #Dahil etmek derleyiciye iostream.h'de bulunan standart giriş ve çıkış akışı özelliklerini etkinleştirmesini söyler. Bu açıklamalar olmadan, ifade cout << "Bu benim ilk programım" mantıklı olmaz. Ana standart kitaplıklar Tablo 1'de listelenmiştir.

Tablo 1.

Temel Standart C/C++ Kitaplıkları

Operasyon<< ("поместить в") пишет свой первый аргумент во второй (в данном случае, строку "Bu benim ilk programım" için cout'un standart çıktısı). Bir dize, çift tırnak içine alınmış bir karakter dizisidir. Bir dizede, ters eğik çizgi \ ve ardından başka bir karakter bir özel karakteri belirtir; bu durumda, \n bir yeni satır karakteridir. Böylece, çıktı karakterler oluşur " Bu benim ilk programım" ve adlı bir işlevi tanımlayan yeni satır ana. Her program adında bir fonksiyon içermelidir. ana, ve program bu işlevi yürüterek başlar.

Klavye Girişi

Aşağıdaki (oldukça ayrıntılı) program, sizden bir inç sayısı girmenizi ister. Bunu yaptıktan sonra, karşılık gelen santimetre sayısını yazdıracaktır.

Örnek 2:

#Dahil etmek

Void ana()

int inç = 0; // inç - inç

cout<< "inches";

cin >> inç;

cout<< inch;

cout<< " in = ";

cout<< inch*2.54;

cout<< " cm\n";

Fonksiyonun ilk satırı ana() bir tamsayı değişkenini tanımlar inç. Değeri, standart giriş akışında >> ("alma") işlemi kullanılarak okunur Cin.

Bu örnekte, çıktı komutu başına bir ifade vardır; Çok uzun. para çekme işlemi<< можно применять к ее собственному результату, так что последние четыре команды вывода можно было записать одним оператором:

cout<< inch << " in = " << inch*2.54 << " cm\n";

Yorumlar

Yalnızca programı okuyan kişi için yorum olarak tasarlanan ve programdaki derleyici tarafından göz ardı edilen bir programa metin eklemek genellikle yararlıdır. C++'da bu iki yoldan biriyle yapılabilir.

/* karakterleri */ ile biten bir yorum başlatır. Bu karakter dizisinin tamamı bir boşluk karakterine (boşluk karakteri gibi) eşdeğerdir. Bu, çok satırlı yorumlar ve düzenleme sırasında programın bölümlerini atlamak için en kullanışlıdır, ancak /* */ yorumlarının iç içe geçemeyeceğini unutmayın.

Karakterler, göründükleri satırın sonunda biten bir yoruma başlarlar. Yine, tüm karakter dizisi bir boşluğa eşdeğerdir. Bu yöntem en çok kısa yorumlar için kullanışlıdır. // karakterleri /* veya */ karakterlerini yorumlamak için kullanılabilir ve /* karakterleri // yorumlanabilir.

4.6. C++'daki veri türleri

Bir program yazmadan önce veri tiplerini tanımlamak gerekir. C++'da yaygın olarak kullanılan birkaç veri türü vardır (hepsi değil):

Ø Sayısal işaretli tam sayılar (int, kısa, karakter);

Ø Sayısal işaretli kesirli (float, double, long (C'de), long double (C'de);

Ø sayısal işaretsiz - İmzasız'ın eklenmesiyle yukarıda listelenen tüm türler;

Ø karakter olarak da kullanılabilir karakter türü .

İlgili hücrelerin standart türleri ve boyutları aşağıda listelenmiştir.

Menzil Boyut (Bt)
karakter -128..127;
imzasız karakter 0..255;
int -32768..32767;
imzasız int 0..65535;
uzun -2 147 483 648..2 147 483 647;
imzasız uzun 0..4 294 967 295;
yüzer 3.4e-38..3.4e+38;
çift ​​1.7e-308..1.7e+308;
uzun çift 3.4e-4932..3.4e+4932.

C/C++'da bir değişken şu şekilde bildirilir:

int iMyVariable;

Yukarıdaki açıklamada, iMyVariable bir tamsayı değişkeni olarak bildirildi. Ve işte bir tür değişkeninin bildirimi karakter :

Char cMyChar;

gibi veri türleri int , batmadan yüzmek , karakter Ve uzun , C/C++'ın ayrılmaz bir parçasıdır ve derleyiciye bu kelimelerin ne anlama geldiğini söylemek için herhangi bir kod yazmanıza gerek yoktur. C/C++ ayrıca kendi özel veri türlerinizi tanımlamanıza da olanak tanır.

Örnek 3, veri türlerinin boyutunu bayt olarak yazdıracak bir programı göstermektedir. Örnek 3:

#Dahil etmek

Void ana(void)

cout<< " (unsigned)int = " << sizeof(int) << endl;

cout<< " (unsigned)short = " << sizeof(short) << endl;

cout<< " (unsigned)char = " << sizeof(char) << endl;

cout<< " (unsigned)float = " << sizeof(float) << endl;

cout<< " (unsigned)double = " << sizeof(double) << endl;

cout<< " (unsigned)long = " << sizeof(long) << endl;

cout<< " (unsigned)long double = " << sizeof(long double) << endl;

Karşılık gelen türdeki bir hücrenin boyutunu bulmak için programa yazmak yeterlidir. boyutu(tip). Gerçek şu ki, farklı işletim sistemleri için aynı türdeki bir hücrenin boyutu farklı olabilir (örneğin, 16 bit ve 32 bit işletim sistemlerinde int türü, sırasıyla 1 bayt ve 2 bayt).

Şebeke boyutu işlenenin boyutunu bayt cinsinden hesaplar. İşlenen, değerlendirilmeyen bir ifade veya parantez içinde bir tür adı olmalıdır. Şebeke boyutu bir işleve, bit alanına, tanımsız sınıfa, geçersiz türe veya dizin sınırı belirtilmemiş bir diziye uygulanamaz. Bir bayt, bir işlemin sonucu dışında, dil tarafından hiçbir şekilde tanımlanmaz. boyutu, kesinlikle boyutu(char) 1'dir.

4.7. Değişkenler

Değişken, değiştirilmekte olan değeri depolamak için kullanılması gereken bir bellek konumunun adıdır, belleğin program tarafından kullanılabilir olması için ona atanması gerekir. Statik ve dinamik bellek tahsisi vardır. Statik bellek ayırma, derleme zamanında gerçekleşir ve program yürütme sırasında blok boyutu değiştirilemez. Dinamik bellek, yürütme sırasında tahsis edilir ve boyutu, programın mevcut durumuna bağlı olabilir. Programa atanan hafıza alanı verileri depolamak için kullanılır.

Veriler işlem sırasında değişebiliyorsa, değişkenleri, değiştiremezlerse sabitleri kullanmaktan bahsederler. Bir değişkene veya sabite erişmek için adı veya adresi kullanmanız gerekir.

Değişken, programın yürütülmesi sırasında değeri değişebilen adlandırılmış bir bellek alanıdır.

Derleyicinin statik bellek ayırması için tüm değişkenler kullanımları için bildirilmelidir, bu nedenle tam boyutunu bilmesi gerekir. Bir değişken bildirmek için şunları belirtmelisiniz: isim, adres, boyut(türe göre tanımlanır), anlam.

Bildirim bir çift kaşlı ayraç içinde (örneğin, bir işlevin gövdesi içinde) bulunuyorsa, bildirilen değişkenler yerel olarak kabul edilir ve bunlar için bellek, program yığını alanında tahsis edilir ve ilk değer tanımsızdır.

Bir değişken, fonksiyon gövdelerinin dışında bildirilirse, global olarak kabul edilir ve veri segmentine yerleştirilir ve başlangıç ​​değeri sıfırdır. Bir değişkenin kendisine atanmış bir başlangıç ​​değeri ile bildirilmesine denir. başlatma.

Fonksiyonun bir argümanı varsa, değerlerini alacak değişkenleri bildirmelisiniz, bu değişkenler çağrılır. resmi ayarlar.

C++'da erişimi ve değişikliği kontrol eden iki sınıflandırıcı vardır: const Ve uçucu.

Sabit, program yürütme sırasında değeri değiştirilemeyen adlandırılmış bir bellek alanıdır. Sabitlere bildirildiğinde her zaman bir değer atanır ve daha sonra değiştirilemez. Tür değişkenleri const değiştirilemez, ancak başlatılabilirler.

niteleyici uçucu derleyiciye bir değişkenin değerinin örtük olarak değiştirilebileceğini söyler. Örneğin, global değişkenin adresini işletim sistemi zamanlayıcısına iletin ve gerçek zamanı saymak için kullanın. Bu durumda, değişkenin içeriği, herhangi bir atama ifadesi açıkça yürütülmeden değiştirilir.

C/C++ dili şunları sağlar: kontrol karakter sabitleri, tablo 2'de gösterilmiştir.

Tablo 2.

Kontrol karakter sabitleri

En ünlü hizmet karakterleri satır besleme (kod 13), satır başı (kod 10), tablolamadır (kod 9). Bunları programda sembolik sabitler olarak ayarlamak için, sırasıyla “\n”, “\r”, “\t” olmak üzere iki görünür karakterin bir kombinasyonu kullanılır. "\\" yapısı, "eğik çizgi" karakterini temsil etmek için kullanılır.

C'de dört depolama belirteci vardır: harici, statik, kayıt, otomatik.

Bu belirteçler, derleyiciye bildirilen değişkenin nasıl saklanacağını söyler. Bu belirteçleri kullanan bir bildirimin genel biçimi şöyledir:


Benzer bilgiler.


Karakter sabiti, tek tırnak içine alınmış bazı alfabetik karakterlerdir: "<символ_алфавита>" .

Karakter sabitlerine örnekler: " a" " B" "=" "+" " F" "[" " D".

Bir karakter sabitinin değeri, verilen karaktere (Bilgi Değişimi için Amerikan Standart Kodu) eşit bir tamsayıdır. Bir karakter sabiti int(char) türündedir ve 16(8) bitlik bir değerle temsil edilir.

Yazdırıldığında görüntülenmeyen, ancak örneğin yeni bir satır (LF), bir bip, bir bip - ZİL) vb. bazı eylemler gerçekleştiren kodlar vardır. Klavyede bu tür kodlar için ayrı bir tuş yoktur ve ne zaman klavyeden girildiklerinde, belirli tuşların bir kombinasyonu ile yazılırlar: örneğin, Ctrl ve G tuşlarına basılması, "bip" kodunun belleğe girmesine neden olur ve değeri olan bir karakter görüntülendiğinde, "bip" kodu, bilgisayar bip sesi çıkarır.

Soru ortaya çıkıyor: programda bu tür kodlar nasıl kullanılır? Bunu yapmak için C, karakter sabitleriyle doğrudan ilişkili iki yöntem sağlar.

ilk yol . Herhangi bir karakter, aşağıdaki gibi bir karakter sabiti olarak tanımlanabilir:

"\ddd" veya "\xHHH",

nerede ddd- sekizli ve HHH onaltılık karakter kodu. Karakter kodu gösteriminde baştaki sıfırlar atlanabilir. Böylece, buna uygun olarak, yukarıdaki sembolik sabit örnekleri yazılabilir.

" a"

" B"

" F"

" D"

Bip sesine neden olan karakter "\07", yeni satıra yazdırmaya neden olan karakter ise "\x0A" olarak yazılır.

ikinci yol sık kullanılan görüntülenemeyen karakterlerin kodlarla yazılmasına gerek olmaması, ancak bunlar için ayrılmış sembollerin kullanılabilmesidir. C'deki bu karakterler, Tablo 3.3'te sunulan kontrol karakterleri sınıfına atanır.

Tablo 3.3. Kontrol karakterleri

C sembolü ASCII karakteri Sembol adı
Yeni hat
Yatay sekme
Dikey sekme
Geri adım atmak
Satırbaşı
Form gönderme
Boynuz
tek alıntı
çift ​​tırnak
ters eğik çizgi
Soru

Kontrol karakterleri, örneğin çıkış satırında ortaya çıkarsa, ilgili eyleme neden olurlar. İlk altı kontrol karakteri, yazdırma aygıtının çalışmasını kontrol eden karakterlerdir: " karakteri Yeni hat" yazdırmayı bir sonraki satırın başına aktarır; karakter " yatay sekme" geçerli satırdaki yazdırmayı bir sonraki sabit satır konumuna ilerletir. Varsayılan olarak, satır konumları her 8 karakterde bir sabitlenir. Sabit konumlar, biçimi yazıcı belgelerinde açıklanan ESC dizileri kullanılarak değiştirilebilir.

sembol " dikey sekme" yazdırmayı, aynı zamanda yazıcının ESC dizisi tarafından da belirlenen ardışık sabit hat numaralarının başlangıcına kadar ilerletir.

sembol " geri adım atmak" geçerli satırda bir konum geriye bir baskı kayması üretir, yani aynı aşinalıkta belirli sayıda karakter yazdırmanıza izin verir.

sembol " formun teslimi" geçerli metnin geri kalanını atlar ve sonraki yeni sayfadan yazdırmaya başlar.

Tablonun yedinci karakteri " bip sesi" bir bip sesi başlatır. Kalan dört karakter aslında kontrol karakterleri değildir, ancak benzer ayrılmış adlandırmalara sahip oldukları için tabloya dahil edilirler. Karakterler olarak dize sabitlerinde olağan kullanımları (bkz. sonraki bölüm 3.1.4.) hata verir ve bu formda kullanmak, bunları çıktı satırında yazdırmanıza olanak tanır.

Bu, " sembolü için geçerli değildir. soru". Her durumda, C'nin "?" karakteriyle belirtilen bir işlemi olması nedeniyle "soru" karakteri ayrılmış karakterler arasındaydı ve bazı durumlarda bu, dil yapılarının belirsiz bir yorumuna yol açabilir. Karakter "question" bir karakter sabiti olarak yukarıdaki yollardan herhangi biriyle yazılabilir: "?" "\77" "x3F" "\?" .

Bölümün sonunda, sembolik sabitlerin tamsayı sabitleri olduğuna dikkat çekiyoruz. Bu nedenle, örneğin, "ab" "ta" "ma" "do" gibi iki karakterli sabitler yazmak da mümkündür. Ancak, bu durumda int verisi olarak ele alınmaları gerekir. char türünde bir değişkene iki karakterli bir sabit atamaya çalışırsanız, bu gerçekleşir. saniye kaybı sembol.

İki karakterli bir sabit, "\ddC" veya "\xHHc" olarak yazılabilir; burada C, sekizli basamaktan farklı bir alfabetik karakterdir ve c, onaltılık basamaktan başka bir karakterdir. Örneğin, "\538", "+8" ile aynıdır, çünkü derleyici \53'ü sekizlik karakter kodu + ve ardından 8 karakteri olarak yorumlar. Benzer şekilde, "\x6DQ", "mQ" olarak algılanır, yani. \x6D, m karakterinin ve ardından Q karakterinin onaltılık kodudur. C bu konuda en geniş olanakları sağlamasına rağmen, bu tür "hileleri" kullanmanızı önermiyoruz.

Karakter türü tablosu

Unicode gibi genişletilmiş bir karakter kümesiyle çalışmak için şunu yazın wchar_ T(geniş karakter, Windows'ta 16 bit, GNU/Linux'ta 32 bit, ancak 8 bitlik bir değer olarak da gösterilebilir.

2011 C ve C++ standardı sabit karakter türlerini tanıttı karakter16_t ve char32_t Unicode biçimlerinin 16-bit ve 32-bit dönüşümlerinin açık bir temsilini sağlamak için.

sabitler

sabitler değişmez nicelikler denir. Tamsayı, gerçek, karakter ve dize sabitleri vardır. Bir sabiti belirteç olarak atayan derleyici, onu görünümüne göre türlerden birine yönlendirir.

Her türe karşılık gelen sabitlerin biçimleri Tablo'da verilmiştir. 7.1.

Tablo 7.1.

C++'da Sabitler

Devamlı Biçim Örnekler
Tüm Ondalık: Sıfır olmadığı sürece sıfırdan başlamayan ondalık basamak dizisi 8, 0, 199226
Sekizli: Sıfır ve ardından sekizli rakamlar (0,1,2,3,4,5,6,7) 01, 020, 07155
Onaltılı: Ox veya OX ardından onaltılık rakamlar (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) 0xA, 0x1 B8, 0x00FF
gerçek Ondalık: [rakam], [rakam] 5.7, .001, 35.
Üstel: [rakamlar][.][rakamlar](E|e)[+|-[rakamlar] 0.2E6, .11e-3, 5E10
Simgesel Kesme işareti içine alınmış bir veya iki karakter "A", 'u', "*", 'db' '\0' '\n', '\012' "\x07\x07"
sicim Tırnak işaretleri içine alınmış bir dizi karakter "Vasia buradaydı", "\tValue r=\0xF5\"

Negatif bir tamsayı veya gerçek bir sabit oluşturmak gerekiyorsa, (-) işaretini değiştirme tekli işleminin işareti sabitin önüne yerleştirilir, örneğin: -218, -022, -0x3C, -4.8, -0.1 e 4.

Üstel biçimdeki gerçek bir sabit, mantis ve üs olarak temsil edilir. Mantis, üs işaretinin (E veya e) soluna yazılır, sıra işaretin sağına yazılır. Bir sabitin değeri, mantisin çarpımı ve belirtilen sıraya yükseltilmiş 10'un kuvveti olarak tanımlanır.Sayı içindeki boşluklara izin verilmediğini ve tamsayı kısmını ayırmak için virgül değil nokta kullanıldığını unutmayın. kesirli kısım.

Programcı sabitin türünü kendisi ayarlayabilir. Tamsayı kısmı veya kesirli kısım atlanabilir, ancak ikisi birden olamaz. Her iki kısım da belirtilirse, nokta karakteri gereklidir.

Bir karakterden oluşan karakter sabitleri bellekte bir bayt yer kaplar ve standart karakter tipine sahiptir. İki karakterli sabitler iki bayt kaplar ve int türündedir ve ilk karakter daha düşük adresli bayta yerleştirilir.

Ters eğik çizgi karakteri şunları temsil etmek için kullanılır:

grafik görüntüsü olmayan kodlar (örneğin,
\a - ses sinyali, \n - imleci bir sonraki satırın başına hareket ettirin);

kesme işareti ("), ters eğik çizgi (\), soru işareti (?) ve tırnak işaretleri (");

· onaltılık veya sekizlik koduyla herhangi bir karakter, örneğin, \073, \0xF5. Sayısal değer 0 ile 255 arasında olmalıdır.

Ters eğik çizgi ile başlayan karakter dizilerine denir. yöneticiler, veya Kaçış dizileri. Tablo 7.2. kabul edilebilir değerleri verilmiştir. Kaçış dizisi tek bir karakter olarak yorumlanır. Ters eğik çizgiden hemen sonra Tabloda belirtilmeyen bir karakter geliyorsa 7.2, yorumlamanın sonucu tanımsızdır. Bir basamak dizisinde geçersiz bir karakterle karşılaşılırsa, sayısal kodun sonu olarak kabul edilir.


Tablo 7.2.

C++'da kaçış dizileri

Kaçış dizileri, farklı olarak adlandırılan dize sabitlerinde de kullanılabilir. dize değişmezleri.Örneğin, bir dizenin içine bir alıntı yazmak istiyorsanız, bunun önüne bir bölü çizgisi gelir, bu da derleyicinin onu dizeyi sınırlayan alıntıdan ayırt etmesini sağlar:

"Yayınevi \"Peter\""

Tüm dize değişmezleri, derleyici tarafından farklı nesneler olarak kabul edilir.

Programda yalnızca boşluk karakterleriyle ayrılan dize sabitleri, derleme sırasında birleştirilir. Uzun bir dize sabiti, bir ters eğik çizgi ve ardından tire olarak yeni bir satır kullanılarak birden çok satıra yerleştirilebilir. Bu karakterler derleyici tarafından yok sayılır ve sonraki satır önceki satırın devamı olarak kabul edilir. Örneğin, çizgi

    Tamsayı Sabitleri

    Kayan Nokta Sabitleri

    Sembolik Sabitler

    Teller

    Sıfır

    Sabit

    numaralandırmalar

C++ size temel türlerin değerlerini yazma yeteneği verir: karakter sabitleri, tamsayı sabitleri ve kayan nokta sabitleri. Ek olarak, sıfır (0) herhangi bir işaretçi türünün sabiti olarak kullanılabilir ve karakter dizeleri char türündeki sabitlerdir. Ayrıca sembolik sabitler de belirleyebilirsiniz. Sembolik sabit, değeri kapsamı içinde değiştirilemeyen bir addır. C++'da üç tür sembolik sabit vardır:

    herhangi bir türden herhangi bir değere bir ad verilebilir ve açıklamasına const anahtar sözcüğü eklenerek sabit olarak kullanılabilir;

    bir dizi tamsayı sabiti bir numaralandırma olarak tanımlanabilir;

    herhangi bir vektör veya işlev adı bir sabittir.

Tamsayı Sabitleri

Tamsayı sabitleri dört biçimde gelir: ondalık, sekizlik, onaltılık ve karakter sabitleri. Ondalık sayılar en sık kullanılır ve beklediğiniz gibi görünür:

ondalık eşdeğerleri 0, 2, 63, 83'tür. Onaltılık gösterimde bu sabitler şöyle görünür:

0x00x20x3f0x53

a, b, c, d, e ve f harfleri veya bunların büyük harf eşdeğerleri, sırasıyla 10, 11, 12, 13, 14 ve 15 sayılarını temsil etmek için kullanılır. Sekizli ve onaltılı gösterimler en çok bir dizi bit yazmak için kullanışlıdır; sıradan sayıları ifade etmek için bu gösterimleri kullanmak sürprizlere yol açabilir. Örneğin, bir int'nin ikili ikinin tümleyen onaltılık tamsayı olarak temsil edildiği bir makinede, 0xffff negatif ondalık sayı -1'dir; bir tamsayıyı temsil etmek için daha fazla bit kullanılmış olsaydı, 65535 olurdu.

Kayan Nokta Sabitleri

Kayan nokta sabitleri double türündedir. Önceki durumda olduğu gibi, derleyici temsil edilemeyecek kadar büyük kayan nokta sabitleri hakkında uyarmalıdır. İşte bazı kayan nokta sabitleri:

1.23 .23 0.23 1.1.0 1.2e10 1.23e-15

Kayan nokta sabitinin ortasında boşluk oluşamayacağını unutmayın. Örneğin, 65.43 e-21 bir kayan nokta sabiti değil, dört ayrı sözcük karakteridir (belirteçler):

65.43e-21

ve bir sözdizimi hatası verecektir.
Float türünde bir kayan nokta sabitine sahip olmak istiyorsanız, bunu şu şekilde tanımlayabilirsiniz:

Sabit kayan nokta pi = 3.14159265;

Sembolik Sabitler

C++'da ayrı bir karakter veri türü olmamasına rağmen, daha doğrusu, bir karakter, karakterler için özel ve uygun bir gösterime sahip olan bir tamsayı türünde saklanabilir. Karakter sabiti, tek tırnak içine alınmış bir karakterdir; örneğin "a" veya "0". Bu tür karakter sabitleri, programın çalışacağı makinenin karakter kümesindeki karakterlerin tamsayı değeri için gerçekten karakter sabitleridir (bu, programın derlendiği bilgisayarda kullanılan karakter kümesiyle mutlaka aynı değildir). Bu nedenle, ASCII karakter setini kullanan bir makinede çalışıyorsanız, "0" değeri 48 olacaktır, ancak makineniz EBCDIC kullanıyorsa, o zaman 240 olacaktır. Ondalık gösterim yerine karakter sabitlerini kullanmak programı daha fazla yapar. taşınabilir. Birkaç karakterin ayrıca çıkış karakteri olarak ters eğik çizgiyi \\ kullanan standart adları vardır:

Görünüşlerine rağmen, her biri tek bir semboldür. Ayrıca bir karakteri bir, iki veya üç basamaklı sekizlik bir sayı (sonrasında \\ karakteri ve sekizli basamaklar) veya bir, iki veya üç basamaklı onaltılık bir sayı (\\x ardından onaltılık rakamlarla). Örneğin:

"\\6" "\\x6" 6 ASCII onayı
"\\60" "\\x30" 48 ASCII "0"
"\\137" "\\x05f" 95 ASCII "_"

Bu, makinenin karakter kümesindeki her karakteri temsil etmenize ve özellikle bu karakterleri karakter dizilerine eklemenize olanak tanır. Karakterler için sayısal gösterimin kullanılması, programı farklı karakter kümelerine sahip makineler arasında taşınamaz hale getirir.

Teller

Bir dize sabiti, çift tırnak içine alınmış bir karakter dizisidir:

"bu bir dizedir"

Her dize sabiti, göründüğünden bir karakter daha içerir; hepsi 0 değerine sahip boş "\\0" karakteriyle biter.

Örneğin:

sizeof("asdf")==5;

Bir dize "uygun sayıda karakterden oluşan bir vektör" türünde olduğundan, "asdf" char türündedir. Boş bir dize "" yazılır (ve char türündedir). Her s dizesi için strlen(s)==sizeof(s)-1'in, çünkü strlen() sonlandırıcı 0'a uymadığına dikkat edin.
Grafik olmayan karakterleri temsil etmek için ters eğik çizgi kuralı bir dize içinde de kullanılabilir. Bu, dizede çift tırnak ve kaçış karakterinin \\ temsil edilmesini mümkün kılar. Bu türden en yaygın karakter, açık farkla "\\n" yeni satır karakteridir.

Örneğin:

cout<< "гудок в конце сообщения\\007\\n"

7, bel (zil) karakterinin ASKII değeridir.

Bir dizgede "gerçek" bir yeni satıra sahip olmak mümkün değildir:

"Bu bir dize değil,
bir sözdizimi hatası

Ancak, bir satırda ters eğik çizgi ve hemen ardından yeni bir satır gelebilir; ikisi de göz ardı edilecek.

Örneğin:

cout<< "здесь все \\
Tamam"

yazdıracak

burada her şey yolunda

Öncesinde bir kaçış (ters eğik çizgi) bulunan yeni bir satır, satırda yeni bir satırla sonuçlanmaz, bu sadece bir kayıt kuralıdır.

Bir dizgede boş bir karakter olması mümkündür, ancak çoğu program ondan sonra karakter olduğunu varsaymaz. Örneğin, "asdf\\000hjkl" dizesi, strcpy() ve strlen() gibi standart işlevler tarafından "asdf" olarak ele alınacaktır.

Sekizli veya onaltılı gösterim kullanarak bir dizeye sayısal bir sabit yazarken, her zaman üç basamaklı bir sayı kullanmak akıllıca olur. Sabitten sonraki karakterin bir rakam olup olmadığı konusunda endişelenmenize gerek kalmadan kaydı okumak yeterince zordur. Şu örnekleri keşfedin:

Karakter v1 = "a\\x0fah\\0129"; // "a" "\\xfa" "h" "\\12" "9"
char v2 = "a\\xfah\\129"; // "a" "\\xfa" "h" "\\12" "9"
char v3 = "a\\xfad\\127"; // "a" "\\xfad" "\\127"

Ve 9 bit baytlı makinelerde iki basamaklı bir onaltılık gösterimin yeterli olmayacağını unutmayın.

Sıfır

Sıfır (0), herhangi bir tam sayı, kayan nokta veya işaretçi türünün sabiti olarak kullanılabilir. 0 adresinde hiçbir nesne bulunmuyor. Sıfırın türü bağlam tarafından belirlenir. Genellikle (ancak zorunlu olarak değil) uygun uzunluktaki bir dizi tamamen sıfır bit ile temsil edilir.

Sabit

Const anahtar sözcüğü, o nesneyi bir değişken yerine sabit yapmak için bir nesne bildirimine eklenebilir.

Örneğin:

const int model = 145;
const int v = ( 1, 2, 3, 4 );

Bir sabite hiçbir şey atanamayacağından, başlatılmalıdır. Bir şeyi const olarak bildirmek, değerinin kapsamda değişmemesini sağlar:

model = 145; // hata
model++; // hata

const öğesinin türü değiştirdiğini, yani sabitin nasıl yerleştirileceğini belirtmek yerine nesnenin nasıl kullanılabileceğini kısıtladığını unutmayın. Bu nedenle, örneğin, bir işlevi const döndüren olarak tanımlamak oldukça makul ve bazen yararlıdır:

Const char* peek(int i)
{
özel[i] döndür;
}

Bunun gibi bir işlev, birisinin üzerine yazılamayan veya yeniden yazılamayan bir satırı (o kişi tarafından) okumasına izin vermek için kullanılabilir.

Öte yandan, derleyici bir nesnenin sabit olduğu gerçeğini çeşitli şekillerde kullanabilir (elbette ne kadar akıllı olduğuna bağlı olarak). En bariz olanı, derleyici değerini bildiği için bir sabit için bellek ayrılmasına gerek olmamasıdır. Ayrıca, sabit bir başlatıcı genellikle (ancak her zaman değil) sabit bir ifadedir, yani derleme zamanında değerlendirilebilir. Bununla birlikte, bir sabit vektörünün genellikle bellek ayırması gerekir, çünkü derleyici genellikle vektörün hangi öğelerine ifadelerde başvurulduğunu çözemez. Bununla birlikte, birçok makinede, bu durumda bile, sabit vektörleri salt okunur belleğe yerleştirerek verimlilik kazanımları elde edilebilir.

Ve bir işaretçi kullanmak iki nesneyi içerir: işaretçinin kendisi ve işaret edilen nesne. Bir işaretçi bildiriminin önüne const eklemek, işaretçinin kendisini değil, nesneyi bir sabit yapar.

Örneğin:

Sabit karakter*pc = "asdf"; // sabite işaretçi
bilgisayar = "a"; // hata
pc="ghjk"; // Tamam

const* operatörü, const olarak işaret edilen nesneyi değil, işaretçinin kendisini tanımlamak için kullanılır.

Örneğin:

Karakter *const cp = "asdf"; // sabit işaretçi
cp="a"; // Tamam
cp="ghjk"; // hata

Her iki nesneyi de sabit yapmak için her ikisinin de const olarak bildirilmesi gerekir.

Örneğin:

Const char *const cpc = "asdf"; // const işaretçisi const
tbp="a"; // hata
cpc="ghjk"; // hata

Tek bir işaretçi aracılığıyla erişildiğinde sabit olan bir nesne, başka yollarla erişildiğinde bir değişken olabilir. Bu özellikle fonksiyon parametreleri için kullanışlıdır. Bir işaretçi parametresini const olarak bildirerek, bir işlevin işaret ettiği nesneyi değiştirmesi engellenir.

Örneğin:

Karakter* strcpy(char* p, const karakter* q); // q değiştirilemez

Bir sabite işaretçiye bir değişkenin adresi atanabilir, çünkü bundan hiçbir zararı olamaz. Ancak, kısıtlanmamış bir işaretçiye bir sabitin adresini atayamazsınız, çünkü bu, nesnenin değerini değiştirir.

Örneğin:

Int a = 1;
sabit c = 2;
const* p1 = // tamam
const* p2 = // tamam
int* p3 = // hata
*p3 = 7; // c'nin değerini değiştirir

Her zamanki gibi, tür bildirimden çıkarılırsa, int olduğu varsayılır.

numaralandırmalar

Tamsayı sabitlerini tanımlamak için bazen const kullanmaktan daha uygun olan başka bir yöntem vardır.

Örneğin:

Enum(ASM, OTOMATİK, KIRILMA);

Numaralandırıcı adı verilen üç tamsayı sabiti tanımlar ve bunlara değerler atar. Numaralandırıcı değerleri varsayılan olarak artan sırada 0'dan başlayarak atandığından, bu, şunu yazmaya eşdeğerdir:

Sabit ASM = 0;
const OTOMATİK = 1;
const BREAK = 2;

Bir enum adlandırılabilir.

Örneğin:

Enum anahtar sözcüğü ( ASM, AUTO, BREAK);

Ve numaralandırma adı, yeni bir tür değil, int ile eşanlamlı hale gelir. Sadece int yerine değişken bir anahtar kelime bildirmek, hem programcıya hem de derleyiciye, kullanımın kasıtlı olduğuna dair bir ipucu verebilir.

Örneğin:

Anahtar kelime anahtarı;
anahtar(anahtar)(
vaka ASM:
// bir şey yapar
kırmak;
vaka BREAK:
// bir şey yapar
kırmak;
}

Üç anahtar kelime değerinden sadece ikisi kullanıldığı için derleyicinin uyarı vermesine neden olur.

Numaralandırıcı değerlerini açık olarak da ayarlayabilirsiniz.

Örneğin:

numaralandırma int16(
işaret = 0100000, // işaret
Most_significant=040000, // en önemli
en az_önemli=1 // en az önemli
};

T bu tür değerlerin farklı, artan veya pozitif olması gerekmez.