【C言語入門】型と変数の一覧(サイズ、範囲、宣言について解説)

こんにちは!フリーランスの長野です。

プログラミングでよく使うのが変数ですよね。C言語でも数字や文字列などの型を指定し値を格納する変数にそれぞれ名前を付けて、その変数名を使って処理を記述します。

その変数名に代入する値を必要に応じて変えることで処理結果が変わってきます。

この記事では、型と変数について

  • 変数、型とは
  • 型の一覧(サイズ、範囲)
  • 変数の値を表示する方法
  • 型の変換について
  • 記憶域クラスについて
  • 型修飾子について
  • など、まとめ的な内容についても解説していきます。今回は型と変数について、使い方をわかりやすく解説します!

    変数、型とは

    変数とはデータを格納しておく領域のことです。変数は通常メモリ上に確保され、値を代入したり参照したりすることができます。

    それぞれの領域を区別するために変数名を付けて宣言します。またとは、数字や文字などのデータをメモリ上に確保する領域やバイト長、確保した領域の扱い方などを指定するものです。

    変数の宣言

    変数の宣言は次のように記述します。

    記憶域クラスとは、変数を格納する記憶領域を指定するものです。型修飾子とは、変数の用途をこまかく指定するものです。

    変数の初期化と値の代入

    変数は必要に応じて宣言時に初期化する場合もあります。また同じ型の変数は「,」(カンマ)区切って1行で宣言する場合もあります。

    また値や式の代入は次のように記述します。

    値を参照する場合は、変数名を使って参照します。

    それでは型および記憶域クラス、型修飾子についても詳しくみていきましょう!

    型の一覧(サイズ、範囲)

    型とは、数字や文字などのデータをメモリ上に確保する領域やバイト長、確保した領域の扱い方などを指定するものです。

    型には以下のような種類があります。

    型名説明
    void型なし
    char文字型
    int整数型
    float単精度浮動小数点型
    double倍精度浮動小数点型
    struct構造体
    union共用体
    enum列挙型

    型はshort、long、unsigned、signedなどの型修飾子と組み合わせて、変数のバイト長や値の範囲が決められます。

    主なデータ型は以下のとおりです。

    種類データ型データ型の名称バイト長値の範囲
    型なしvoidvoid型
    文字列(unsigned) char(符号なし)文字型10~255
    signed char符号付き文字型1-128~127
    整数型unsigned short int符号なし短整数型20~65535
    (signed) short int(符号付き)短整数型2-32768~32767
    unsigned int符号なし整数型40~4294967295
    (signed) int(符号付き)整数型4-2147483648~2147483647
    unsigned long int符号なし長整数型40~4294967295
    (signed) long int(符号付き)長整数型4-2147483648~2147483647
    unsigned long long int符号なし長長整数型80~18446744073709551615
    (signed) long long int(符号付き)長長整数型8-9223372036854775808
    ~9223372036854775807
    浮動小数点型float単精度浮動小数点型4最小の正の数:1.175494e-38
    最大値:3.402823e+38
    double倍精度浮動小数点型8最小の正の数:2.225074e-308
    最大値:1.797693e+308

    変数の値を表示する方法

    変数の値を表示するには、printf関数を使用します。

    int型の変数の値を表示する例について、サンプルコードで確認しましょう。

    実行結果:

    printf関数を使って出力表示する方法については、こちらで詳しく解説していますので、ぜひ参考にしてくださいね。

    【C言語入門】printfで文字列を表示(sprintfの使い方も解説)
    更新日 : 2019年5月6日

    型の変換について

    例えばint型の変数をdouble型の変数として使いたい場合があります。そんな場合は型変換を行う必要があります。

    型変換については、こちらで詳しく解説していますので、ぜひ参考にしてくださいね。

    【C言語入門】型のキャストまとめ(intからdouble、charへの型変換)
    更新日 : 2019年5月22日

    記憶域クラスについて

    記憶域クラスとは、変数を格納する記憶領域を指定するものです。

    記憶域にはメモリの割り当て方で3種類に分けられます。自動記憶域のスタック領域と、静的記憶域のスタティック領域とヒープ領域です。

    また、この他にもデータを記憶する領域としてCPU内のレジスタが使われることがあります。

    記憶クラス名について下記のように簡単にまとめています。

    記憶域クラス名説明
    extern複数のソースファイルで1つの変数を共有する
    staticファイルの有効範囲内:他のソースファイルから隠ぺい
    ブロックの有効範囲内:前の値を保存
    auto一般的に省略
    registerレジスタを使用
    typedefデータ型に別名を付ける

    auto、staticについて

    スタック領域では自動的にメモリの割り当てと解除が行われます。したがって自動変数と呼ばれ、記憶クラス名は「auto」を使用しますが、記述を省略するのが一般的です。

    記憶域クラスの指定のない変数は自動変数ということになります。スタティック領域ではプログラムの起動時にメモリが割り当てられ、プログラム終了時まで割り当てが変化しません。記憶クラス名は「static」を使用します。

    なお、「static」と「auto」の詳しい説明や使い方についてはこちらを参考にしてくださいね!

    【C言語入門】staticの使い方まとめ(関数、変数、定数、構造体)
    更新日 : 2019年4月22日

    externについて

    C言語ではコンパイルの際に1個のソースファイルを機械語に翻訳して1個のオブジェクトファイルを作成します。

    その際に「結合」と呼ばれる変数名とメモリのアドレスの対応付けを行います。1個のオブジェクトファイルに限定した結合を内部結合、他のオブジェクトファイルとの結合を外部結合と呼びます。記憶クラス名は「static」は内部結合で使用し、外部結合では「extern」を使用します。

    「extern」の詳しい説明や使い方についてはこちらを参考にしてくださいね!

    【C言語入門】グローバル変数の使い方
    更新日 : 2019年4月3日

    参考:malloc、freeについて

    また、ヒープ領域ではプログラムの実行中に必要なメモリを確保したり、解放したりします。mallocやfreeなどの関数を使用します。

    mallocやfreeなどの詳しい説明や使い方についてはこちらを参考にしてくださいね!

    【C言語入門】mallocの使い方(memset, memcpy, free, memcmp)
    更新日 : 2019年3月29日

    registerについて

    CPU内のレジスタはアクセスが比較的高速で、可能な限り高速に処理したい場合に使われことがあります。ただし、レジスタを使用したからといって必ずしも高速になるとは限りません。記憶クラス名は「register」を使用します。

    typedefについて

    その他の記憶クラス名には「typedef」があります。データ型に新しい型を付ける場合に使用し、構造体を宣言するときなどによく使われます。

    「typedef」を構造体の宣言で使用する場合の詳しい説明や使い方についてはこちらを参考にしてくださいね!

    【C言語入門】構造体の使い方(struct、ポインタ、アロー演算子)
    更新日 : 2019年4月20日

    型修飾子について

    型修飾子とは、変数の用途をこまかく指定するものです。型修飾子にはshort、long、unsigned、signedなどの変数のバイト長や値の範囲を決める修飾子のほかに、const、restrict、volatileなどがあります。

    型修飾子について下記のように簡単にまとめています。

    型修飾子説明
    short
    long
    signed符号付き
    unsigned符号なし
    const定数化
    restrict最適化を促進
    volatile最適化を抑制

    constについて

    「const」変数を定数として扱う場合に使用します。

    「const」の詳しい説明や使い方についてはこちらを参考にしてくださいね!

    【C言語入門】constの使い方
    更新日 : 2019年3月27日

    restrictについて

    「restrict」ポインタに用いる型修飾子です。

    そのポインタが指す先を同一関数・同一ブロック内の別のポインタが指さないようにコンパイラに指定することができます。そうすることでコンパイラの最適化を促進しますが、目に見える動作は変わりません。

    memcpy関数などの引数で使用します。

    memcpy関数の詳しい説明や使い方についてはこちらを参考にしてくださいね!

    【C言語入門】mallocの使い方(memset, memcpy, free, memcmp)
    更新日 : 2019年3月29日

    volatileについて

    「volatile」は割り込み処理や他のスレッドから変数が変更される可能性がある場合などに指定します。

    変数がコンパイラのあずかり知らないところで変更される場合に使われ、コンパイラの最適化によって起こる不具合を回避することができます。

    まとめ

    ここでは、型を指定し変数を宣言する方法について説明しました。

    記憶域クラスや型修飾子を使うことで変数の役割を変えることができます。それぞれ使いこなすことができるように、この記事を何度も参考にして下さいね!

    LINEで送る
    Pocket

    最短でエンジニアを目指すなら侍エンジニア塾

    cta_under_bnr

    侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

    あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

    無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

    無料体験レッスンの詳細はこちら

    書いた人

    長野 透

    長野 透

    熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
    お問合せはこちらでも受け付けています。
    [email protected]

    おすすめコンテンツ

    あなたにぴったりなプログラミング学習プランを無料で診断!

    プログラミング学習の効率を劇的に上げる学習メソッドを解説