logo

C の const ポインター

定数ポインタ

C の定数ポインタは、それが指す変数のアドレスを変更できません。つまり、アドレスは一定のままです。したがって、定数ポインターが何らかの変数を指している場合、他の変数を指すことはできないと言えます。

定数ポインタの構文

 *const ; 

定数ポインタの宣言は次のとおりです。

 int *const ptr; 

例を通して定数ポインターを理解しましょう。

 #include int main() { int a=1; int b=2; int *const ptr; ptr=&a; ptr=&b; printf('Value of ptr is :%d',*ptr); return 0; } 

上記のコードでは次のようになります。

  • 2 つの変数、つまり、それぞれ値 1 と 2 を持つ a と b を宣言します。
  • 定数ポインターを宣言します。
  • まず、変数「a」のアドレスをポインタ「ptr」に代入します。
  • 次に、変数「b」のアドレスをポインタ「ptr」に代入します。
  • 最後に、「ptr」が指す変数の値を出力しようとします。

出力

C の const ポインター

上記の出力では、上記のコードが「読み取り専用変数 'ptr の割り当て」エラーを生成していることがわかります。これは、「ptr」が保持する変数「ptr」の値は変更できないことを意味します。上記のコードでは、「ptr」の値を &a から &b に変更していますが、定数ポインターではこれは不可能です。したがって、ある変数を指す定数ポインタは別の変数を指すことはできないと言えます。

定数へのポインタ

定数へのポインタは、ポインタが指す変数の値を変更できないポインタです。これらのポインタのアドレスは変更できますが、ポインタが指す変数の値は変更できません。

定数へのポインタの構文

 const * 

定数へのポインタの宣言は次のとおりです。

 const int* ptr; 

例を通して理解しましょう。

    まず、ポインターの値を変更するコードを書きます。
 #include int main() { int a=100; int b=200; const int* ptr; ptr=&a; ptr=&b; printf('Value of ptr is :%u',ptr); return 0; } 

上記のコードでは次のようになります。

  • 2 つの変数、つまり、それぞれ値 100 と 200 を持つ a と b を宣言します。
  • 定数へのポインタを宣言します。
  • まず、変数「a」のアドレスをポインタ「ptr」に代入します。
  • 次に、変数「b」のアドレスをポインタ「ptr」に代入します。
  • 最後に、「ptr」の値を出力してみます。

出力

C の const ポインター

上記のコードは正常に実行され、出力に「ptr」の値が表示されます。

  • ここで、ポインターが指す変数の値を変更するコードを作成します。
 #include int main() { int a=100; int b=200; const int* ptr; ptr=&b; *ptr=300; printf('Value of ptr is :%d',*ptr); return 0; } 

上記のコードでは次のようになります。

  • 2 つの変数、つまり、それぞれ値 100 と 200 を持つ「a」と「b」を宣言します。
  • 定数へのポインタを宣言します。
  • 変数「b」のアドレスをポインタ「ptr」に代入します。
  • 次に、ポインタ 'ptr' を介して変数 'b' の値を変更しようとします。
  • 最後に、ポインタ 'ptr' が指す変数の値を出力しようとします。

出力

C の const ポインター

上記のコードは、「読み取り専用の場所 '*ptr' の割り当て」エラーを示しています。このエラーは、ポインターが指している変数の値を変更できないことを意味します。

定数への定数ポインタ

定数への定数ポインタは、上記の 2 つのポインタを組み合わせたポインタです。指す変数のアドレスを変更したり、このアドレスに配置された値を変更したりすることはできません。

構文

 const * const ; 

定数への定数ポインタの宣言を以下に示します。

 const int* const ptr; 

例を通して理解しましょう。

 #include int main() { int a=10; int b=90; const int* const ptr=&a; *ptr=12; ptr=&b; printf('Value of ptr is :%d',*ptr); return 0; } 

上記のコードでは次のようになります。

  • 2 つの変数、つまり、それぞれ値 10 と 90 を持つ 'a' と 'b' を宣言します。
  • 定数への定数ポインタを宣言し、「a」のアドレスを割り当てます。
  • ポインタ 'ptr' を介して変数 'a' の値を変更しようとします。
  • 次に、変数 'b' のアドレスをポインタ 'ptr' に代入しようとします。
  • 最後に、ポインタ 'ptr' が指す変数の値を出力します。

出力

C の const ポインター

上記のコードは、「読み取り専用の場所 '*ptr' の割り当て」および「読み取り専用変数 'ptr' の割り当て」というエラーを示しています。したがって、定数への定数ポインタは、このポインタが指すアドレスも値も変更できないと結論付けます。