【C言語】constの使い方

C言語

この記事では、C言語のconstの使い方を解説します。変数宣言時にcosntを付けることで、その変数を書き換え不能にし、読み取り専用にすることができます。また、ポインタ変数に修飾することで、constを記述した位置により、アドレスを書き換え不能にしたり、アドレス先の値を書き換え不能にできます。

それでは、constの使い方を変数とポインタ変数に分けて確認していきましょう!

変数を修飾する

constは型名の前か後ろに記述します。

const 型名 変数名;

型名 const 変数名;

サンプル

試しに、constで修飾した変数を書き換えてみましょう!

#include <stdio.h>
 
int main(void) {

    // int型の定数
    const int num = 1;

    // 書き換えてみる
    num = 2;
}

コンパイルエラー

9: error: cannot assign to variable 'num' with const-qualified

このように、constで修飾した変数を書き換えようとするとコンパイルエラーが発生します。

ポインタ変数を修飾する

ポインタ変数に修飾する場合、constを記述する位置によって意味が異なります。

アドレス先の値を読み取り専用にする

型名の前にconstを記述すると、アドレス先の値が書き換え不能となります。

#include <stdio.h>
 
int main(void) {

    int num = 1;
    const int* p = &num;

    // アドレス先の値を書き換えてみる
    *p = 2;
}

コンパイルエラー

9: error: read-only variable is not assignable

ポインタ変数自体を読み取り専用にする

型名の後にconstを記述すると、ポインタ変数自体が書き換え不能となります。

#include <stdio.h>
 
int main(void) {

    int num1 = 1, num2 = 2;
    int* const p = &num1;

    // アドレスを書き換えてみる
    p = &num2;
}

コンパイルエラー

9: error: cannot assign to variable 'p' with const-qualified

どちらにも修飾

上記の二箇所にconstを記述することで、アドレス先の値も、ポインタ変数自体も書き換え不能となります。

#include <stdio.h>
 
int main(void) {

    int num1 = 1, num2 = 2;
    const int* const p = &num1;

    // アドレス先の値を書き換えてみる
    *p = num2;

    // アドレスを書き換えてみる
    p = &num2;
}

コンパイルエラー

9: error: read-only variable is not assignable
12: error: cannot assign to variable 'p' with const-qualified

関数の引数に修飾する

関数のポインタ引数を関数内で値を書き換えられたくない場合、constで修飾することで安全に引数を扱うことができます。

// アドレス先の値を読み取り専用にする
型名 関数名(const 型名* 引数名){

}

// ポインタ変数自体を読み取り専用にする
型名 関数名(型名* const 引数名){

}

// 完全に読み取り専用にする
型名 関数名(const 型名* const 引数名){

}

まとめ

この記事では、C言語のconstの使い方を解説しました。constを使うことで書き換えられたくないデータを読み取り専用にすることができます。書き換えられたくないデータはconstで修飾し、安全性の高いコードを作成しましょう!

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

タイトルとURLをコピーしました