C++ の変数と型: Int、Char、Float、 Double、文字列とブール値

C++ の変数

C++ 変数は、名前付きストレージ機能を提供します。これにより、プログラマーは必要に応じてデータを操作できます。 C++ では、すべての変数に型があります。変数タイプは、変数のメモリ マップのサイズとレイアウト、そのメモリ内に格納できる値の範囲、および変数のセットを決定するのに役立ちます。 operaそれに適用できるオプション。

C++ の変数の基本的な型

C++ 変数の基本的なタイプは次のとおりです。

Int:

整数は数値リテラル ( numbers) 小数部や指数部は含まれません。例。 120、-90など

Double:

それは、 double-精度の浮動小数点値。例: 11.22、2.345

Char:

文字リテラルは、単一の文字を一重引用符で囲むことによって作成されます。 例: 「a」、「m」、「F」、「P」、「}」など。

浮く:

浮動小数点リテラルは、分数形式または指数形式の数値リテラルです。 例: 1.3、2.6

文字列リテラル:

文字列リテラルは、次のように囲まれた一連の文字です。 double-引用符。例:「調子はどうですか?」

ブール:

ブール値 true または false を保持します。

C++ での変数宣言のルール

変数に名前を付けるための一般的なルールをいくつか示します。

  • C++ 変数名にはアルファベットのみを使用できます。 numbers、アンダースコア。
  • C++ 変数名を数字で始めることはできません。
  • 変数名は大文字で始めてはなりません。
  • C++ で使用される変数名をキーワードにすることはできません。 たとえば、int は整数を表すために使用されるキーワードです。
  • C++ 変数名はアンダースコアで始めることができます。 ただし、これは良い習慣とは見なされません。

C++ 変数のデータ型

C++ はプリミティブ型のセット全体を定義します

  ボイド type には関連付けられた値がなく、限られた状況でのみ使用できます。 最も一般的には、値を返さない関数の戻り値の型として使用されます。

  算術型 文字、整数、ブール値、浮動小数点が含まれます numbers。算術型をさらに2つに分けると

  1. 浮動小数点型。 float (または float 型) は 10 進数を表します numbers。 IEEE 標準では、最小有効桁数が指定されています。ほとんどのコンパイラは通常、指定された最小値よりも高い精度を提供します。通常、浮動小数点は 32 ビットで表現されます。 doubles は 64 ビットで、long double96 ビットまたは 128 ビットのいずれかです。
  2. 整数型 (文字、整数、およびブール型が含まれます)。 の ブーリアン type には True または False の XNUMX 種類の値しかありません。 いくつかあります チャリオット タイプのほとんどは国際化をサポートするために存在します。 最も基本的な文字タイプは char です。 char は、XNUMX バイトを意味する XNUMX つのマシン バイトと同じサイズです。

  整数型 署名されている場合と署名されていない場合があります。

署名付きタイプ: ネガティブまたはポジティブを表します numbers (ゼロを含む)。符号付き型では、範囲は +ve 値と -ve 値の間で均等に分割される必要があります。したがって、8 ビットの signed char は、-127 から 127 までの値を保持します。

符号なし型: unsigned 型では、すべての値は >= 0 です。8 ビット unsigned char には、0 ~ 255 (両方を含む) を含めることができます。

C++ 変数のデータ型

変数名または識別子

識別子は、文字、数字、アンダースコア文字、またはそれらの組み合わせで構成できます。 名前の長さに制限はありません。

識別子は次のとおりです。

  • 文字またはアンダースコア ('_') で始まります。
  • 大文字と小文字が区別されます。 大文字と小文字は区別されます。

// XNUMX つの異なる int 変数を定義します

int guru99, gurU99, GuRu99, GURU99;

C++ 言語では、使用するためにいくつかの名前が予約されています。

変数名または識別子

変数の命名規則として受け入れられているものが多数あります。 さまざまなプログラミング言語。 フォロwing これらの規則により、プログラムの可読性が向上します。

  • 識別子は、少なくともその意味を示すものでなければなりません。
  • 変数名は通常小文字です (Guru99 や GURU99 ではなく、guru99)。
  • 私たちが定義するクラスは通常、大文字で始まります。
  • 複数の単語を含む識別子は、すべての単語を視覚的に区別する必要があります。 たとえば、guru99website ではなく、guru99_website です。

C++ 変数の宣言と定義

変数を宣言すると、変数が定義されているスコープ内のプログラムに名前が認識されます。 例:

int a=5;
int b;
char c='A'; 
int a,b;
a=b=1000;
List initialization
int a(5);
int b{5};

C++ の Const 修飾子

ユーザーから取得する入力の数を示す変数 buffsize があるとします。 ここでは、プログラム全体で buffsize の値を変更したくありません。 値が変更されるべきではないことがわかっている変数を定義したいと考えています。

このような場合は、キーワード const を使用します。

const int bufSize = 512;    // input buffer size

これは bufSize を定数として定義します。 bufSize を割り当てたり変更しようとすると、エラーが発生します。

ここで、const オブジェクトの作成後にその値を変更することはできません。宣言および初期化が必須である必要があります。他のwise コンパイラがエラーをスローします。

const int i = get_size();  // ok: initialized at run time
const int j = 42;          // ok: initialized at compile time
const int k;               // error: k is uninitialized const
int i = 42;
const int ci = i;    	   // ok: the value in i is copied into ci 

C++ の変数のスコープ

スコープとは、変数が意味を持つプログラムの範囲です。 ほとんどの場合、同じ名前を使用して、異なるスコープ内の異なるエンティティを参照できます。 変数は、宣言された時点から、その宣言が含まれるスコープの終わりまで表示されます。

#include <iostream>	
int main()	
{	
    int sum = 0;	
    // sum values from 1 through 10 inclusive	
    for (int val = 1; val <= 10; ++val)	
        sum += val;  // equivalent to sum = sum + val	
    cout << "Sum of 1 to 10 inclusive is "<< sum <<endl;	
    return 0;	
}	 

このプログラムは 3 つの名前を定義します。 viz、main、sum、val。 これは、名前空間名 std と、その名前空間の他の XNUMX つの名前 (cout および endl) を使用します。

  • 中括弧の外側に関数名「main」が定義されています。 関数名 main は、関数の外で定義された他のほとんどの名前と同様に、グローバル スコープを持ちます。 つまり、一度宣言すると、 グローバルスコープ プログラム全体を通じてアクセスできます。
  • 変数 sum は、main 関数の本体であるブロックのスコープ内で定義されます。 宣言点から、および main 関数本体の残りの部分全体を通してアクセスできます。 ただし、その外側ではありません。 これは、変数合計が ブロックスコープ.
  • 変数valは「for文」のスコープ内で定義されます。 このステートメントでは簡単に使用できますが、メイン関数の他の場所では使用できません。 それは持っています ローカルスコープ.

ネストされたスコープ

スコープには他のスコープを含めることができます。 含まれる (またはネストされた) スコープは、内部スコープと呼ばれます。 含まれるスコープは外側のスコープです。

#include <iostream>	
using namespace std;	
// Program for illustration purposes only: It is bad style for a function	
// to use a global variable and also define a local variable with the same name	
int reused = 42;  // reused has global scope	
int main()	
{	
    int unique = 0; // unique has block scope	
    // output #1: uses global reused; prints 42 0	
    cout << reused << " " << unique << endl;	
    int reused = 0; // new, local object named reused hides global reused	
    // output #2: uses local reused; prints 0 0	
    cout << reused << " " << unique << endl;	
    // output #3: explicitly requests the global reused; prints 42 0	
    cout << ::reused << " " << unique << endl;	
    return 0;	
}	 

出力#1 は、再利用のローカル定義の前に表示されます。 したがって、この出力は

ステートメントは、グローバル スコープで定義された名前を再利用するステートメントです。 このステートメントの出力は

42 0

出力#2 再利用のローカル定義の後に発生します。 現在は範囲内です。 したがって、この XNUMX 番目の出力ステートメントは、グローバル オブジェクトではなく、reused という名前のローカル オブジェクトを単に使用し、出力します。

0 0

出力#3 を使用してデフォルトのスコープ規則をオーバーライドします。 スコープ operaタ。グローバル スコープには名前がありません。したがって、スコープが operator(::) の左側は空です。これは、グローバル スコープの右側にある名前を取得するリクエストとして解釈されます。したがって、式はグローバル再利用を使用し、次のように出力します。

42 0

変数の型変換

ある型の変数を別の型に変換できます。 これは「型変換」として知られています。 さまざまな C++ 変数型を変換するためのルールを見てみましょう。

ブール変数に非ブール値を代入すると、値が 0 の場合は false が返され、それ以外の場合は true が返されます。wise.

bool b = 42;            // b is true

ブール値を他の算術型のいずれかに代入すると、ブール値が true の場合は 1 が返され、ブール値が false の場合は 0 が返されます。

bool b = true;
int i = b;              // i has value 1

浮動小数点値を int 型の変数に代入すると、切り捨てられた値が生成されます。 格納される値は小数点以下の部分です。

int i = 3.14;               // i has value 3

float 型の変数に int 値を代入すると、小数部は XNUMX になります。 整数のビット数が浮動変数に対応できる量を超えると、通常、精度が失われます。

Int i=3;
double pi = i;          // pi has value 3.0

範囲外の値を符号なし型の変数に代入しようとすると、結果は値 %(modulo) の余りになります。

たとえば、8 ビット unsigned char 型は、0 ~ 255 の値を保持できます。 この範囲外の値を代入すると、コンパイラはその値の剰余を 256 を法として代入することになります。 したがって、上記のロジックにより、1 ビット unsigned char に –8 を代入すると、そのオブジェクトに値 255 が与えられます。

unsigned char c = -1;   // assuming 8-bit chars, c has value 255

範囲外の値を signed 型のオブジェクトに代入しようとすると、結果は予測できません。 未定義です。 プログラムは外部では動作しているように見える場合もあれば、クラッシュしたり、ガベージ値を生成したりする場合があります。

signed char c2 = 256;   // assuming 8-bit chars, the value of c2 is undefined

コンパイラは、ある型の値が予期される場所で、ある型の値を使用する場合に、これらと同じ種類の変換を適用します。

int i = 42;
if (i) // condition will evaluate as true
i = 0; 

この値が 0 の場合、条件は false です。 他のすべての (ゼロ以外の) 値は true になります。 同じ概念により、算術式で bool を使用すると、その値は常に 0 または 1 のいずれかに変換されます。その結果、算術式で bool を使用することは、通常、ほぼ確実に間違っています。

注意: 署名付きタイプと署名なしタイプを混合しないでください

符号付きと符号なしが混在した式は、符号付きの値が負の場合、予期せぬ間違った結果をもたらす可能性があります。 上で説明したように、符号付きの値は自動的に符号なしに変換されます。

たとえば、次のような算術式では、

x* y

x が -1 で y が 1 で、x と y の両方が int の場合、値は予想どおり -1 になります。

x が int で、y が符号なしの場合、この式の値は、コンパイル マシン上の整数のビット数によって決まります。 私たちのマシンでは、この式は 4294967295 を生成します。

レジスタ変数

レジスタ変数はメモリ変数に比べてアクセスが高速です。 したがって、C++ プログラムで頻繁に使用される変数は、次のコマンドを使用してレジスタに入れることができます。 登録 キーワード。 register キーワードは、指定された変数をレジスタに格納するようにコンパイラに指示します。 レジスタに入れるかどうかはコンパイラの選択です。 一般に、コンパイラ自体は、変数の一部をレジスタに入れることを含むさまざまな最適化を実行します。 C++ プログラム内のレジスタ変数の数に制限はありません。 ただし、コンパイラは変数をレジスタに保存しない場合があります。 これは、レジスタ メモリが非常に限られており、最も一般的には OS によって使用されるためです。

定義します:

register int i;

コメント

コメントは、コンパイラによって無視されるコードの部分です。 これにより、プログラマはソース コード/プログラムの関連領域にメモを作成できます。 コメントはブロック形式または単一行で記述されます。 プログラムのコメントは説明文です。 これは C++ コードに組み込むことができ、誰でもソース コードを読むのに役立ちます。 すべてのプログラミング言語では、何らかの形式のコメントが許可されています。 C++ は、単一行コメントと複数行コメントの両方をサポートします。

  • XNUMX 行コメント // で始まり、行末まで続くものです。 コメント行の最後の文字が \ の場合、コメントは次の行に続きます。
  • 複数行のコメント /* で始まり */ で終わるものです。
/* This is a comment */
/* C++ comments can  also 
* span multiple lines 
*/

エスケープシーケンス

バックスペース文字や制御文字などの一部の文字には、表示されるイメージがありません。このような文字は印刷不可能文字として知られています。他のキャラクター(シングルと double 引用符、疑問符、バックスラッシュ) は、多くのプログラミング言語で特別な意味を持っています。

私たちのプログラムでは、これらの文字を直接使用することはできません。 代わりに、エスケープ シーケンスを使用してそのような char を表すことができます。 エスケープ シーケンスはバックスラッシュで始まります。

  C ++プログラミング言語 いくつかのエスケープ シーケンスを定義します。

それは何をしますか? 文字
改行 \n
垂直タブ \v
バックスラッシュ \\
キャリッジリターン \r
水平タブ \t
バックスペース \b
クエスチョンマーク \?
フォームフィード \f
警報(ベル) \a
Double 率 \」
一重引用符 \ '

エスケープ シーケンスを単一の文字であるかのように使用します。

cout << '\n';        // prints a newline
cout << "\tguru99!\n";   // prints a tab followed by "guru99!" and a newline 

一般化されたエスケープ シーケンス \x に続いて 1 つ以上の XNUMX 進数を記述することもできます。 または、\ の後に XNUMX つ、XNUMX つ、または XNUMX つの XNUMX 進数字を続けて使用します。 一般化されたエスケープ シーケンスは、文字の数値を表します。 いくつかの例 (Latin-XNUMX 文字セットを想定):

\7 (bell)    \12 (newline)      \40 (blank)
\0 (null)    \115 ('M')         \x4d ('M') 

他の文字を使用している場合と同様に、事前定義されたエスケープ シーケンスを使用できます。

cout << "Hi \x4dO\115!\n";  // prints Hi MOM! followed by a newline
cout << '\115' << '\n';     // prints M followed by a newline 

まとめ

  • C++ 変数は、名前付きストレージ機能を提供します。
  • C++ 変数の型: int、 double, チャリオット、float、string、bool など。
  • 含まれる (またはネストされた) スコープは内部スコープと呼ばれ、含まれるスコープは外部スコープと呼ばれます。
  • ある型の変数を別の型に変換できます。 これは「型変換」として知られています。
  • レジスタ変数はメモリ変数に比べてアクセスが高速です。
  • コメントは、コンパイラによって無視されるコードの部分です。
  • バックスペース文字や制御文字などの一部の文字には、表示されるイメージがありません。