C言語の型修飾子とは?const(定数)型修飾子の基本と使い方を解説
型修飾子とは
型修飾子(Type Qualifier)は、C言語において既存のデータ型に特別な属性を付加するためのキーワードです。これにより、変数の扱われ方やアクセス方法についてコンパイラへ指示を出すことができます。
C言語には主に3種類の型修飾子が存在します。本記事では、その中でも特に重要な「const(定数)型修飾子」について詳しく解説します。
const型修飾子の基本
「const」は、一度設定した値をプログラムの実行中に変更できないことを保証する修飾子です。C言語における定数には、以下の3種類があります。
- リテラル定数
- 定義済み定数(#define)
- メモリ定数(const)
1. リテラル定数
リテラル定数とは、名前を持たない定数で、データそのものをソースコード内に直接記述したものです。
例:
a = b + 7; // ここでの '7' がリテラル定数です
2. 定義済み定数
定義済み定数は、プリプロセッサ命令である「#define」を使用して定義される定数です。コンパイル前にテキストとして置き換えられるため、プログラム全体で共通の値を管理するのに便利です。
例:
#define PI 3.1415
3. メモリ定数
メモリ定数は、C言語の修飾子「const」を使用して宣言された定数です。「const」を付けると、そのデータは以後変更できなくなります。
構文:
const 型 識別子 = 値;
例:
const float pi = 3.1415;
このように「const」を使うことで、リテラルに分かりやすい名前を与えることができます。さらに、誤って値を変更しようとした場合にはコンパイルエラーとなるため、プログラムの安全性向上にも役立ちます。
サンプルプログラム
以下は、3種類の定数を使ったC言語のサンプルプログラムです。
#include <stdio.h>
#define PI 3.1415
int main(void) {
const float cpi = 3.14;
printf("literal constant = %f\n", 3.14);
printf("defined constant = %f\n", PI);
printf("memory constant = %f\n", cpi);
return 0;
}
実行結果
上記のプログラムを実行すると、以下のような出力が得られます。
literal constant = 3.14 defined constant = 3.1415 memory constant = 3.14
まとめ
C言語の定数には、「リテラル定数」「#defineによる定義済み定数」「constによるメモリ定数」の3種類があります。特に「const」修飾子を活用することで、変更されないデータに明確な意味を持たせることができ、コードの可読性と保守性の向上につながります。用途に応じて適切な定数の宣言方法を選びましょう。
-
C言語におけるユニオンとポインタの使い方を徹底解説
ユニオン(共用体)とは、異なるデータ型を持つ複数の変数が、同一のメモリ領域を共有するための仕組みです。構造体が各メンバーごとに独立したメモリを割り当てるのに対し、ユニオンではすべてのメンバーが同じアドレスを参照するという点が大きな特徴です。 ユニオンの構文 ユニオンを定義するときの基本的な書式は次の通りです。 union タグ名{ データ型 メンバー1; データ型 メンバー2; ---- ---- データ型 メンバーn; }; 実際の記述例を見てみましょう。 union sample{ int a; float b; char
-
C言語のポインタ入門!宣言・初期化から配列アクセスの実例まで徹底解説
ポインタ(pointer)とは、他の変数のメモリアドレスを格納するための変数です。C言語においてポインタは、メモリを直接操作したり、関数間でデータを効率的にやり取りしたりするために欠かせない重要な概念です。 ポインタの宣言・初期化とアクセス まず、次のような通常の整数変数の宣言を見てみましょう。 int qty = 179; 変数qtyには値「179」が格納されると同時に、メモリ上のどこかにその格納場所(アドレス)が割り当てられます。 ポインタの宣言 int *p; 「p」はポインタ変数であり、別の整数型(int)変数のアドレスを保持します。変数名の前にアスタリスク(*)を付けることで、「こ