C の定数ポインターと定数へのポインターをマスターする
C ではポインタ 別の変数のメモリ アドレスを格納する変数とconst キーワードです。 一度初期化すると値を変更できない変数またはポインターを定義するために使用されます。 ポインタを組み合わせるとき 定数を使用 キーワードを使用すると、2 つのことを制御できます -
- ポインタに格納されているアドレスを変更できるかどうか。
- そのアドレスに保存されている値が変更できるかどうか。
この章では、定数ポインターの 3 つの主なバリエーションを見ていきます -
- 定数ポインタ
- 定数へのポインタ
- 定数への定数ポインタ
定数ポインタ
定数ポインタ ポインタ自体が定数であることを意味します。メモリの場所を指すように初期化されると、別の場所を指すことはできませんが、その場所に格納されている値は変更できます。
以下は定数ポインタの構文です。 −
data_type *const pointer_name = &variable;
この構文では、data_type ポインタが指すデータのタイプ、*const ポインタ自体を定数、pointer_name にします。 はポインタの名前、&変数 変数のメモリ アドレスを割り当てます。
定数ポインタの例
この例では、定数ポインター ptr を宣言します。 変数 x のアドレスで初期化します。 。次に、x の値を変更します。 ptr を使用する そしてその値を出力します。
#include <stdio.h>
int main() {
int x = 10;
int y = 20;
int *const ptr = &x; // constant pointer to int
printf("Value of x: %d\n", *ptr);
*ptr = 15; // can change the value at address
printf("Modified value of x: %d\n", *ptr);
// ptr = &y; // changing pointer address is not allowed
return 0;
}
以下に出力を示します。 上記のプログラムでは、ポインタが x に固定されたままであることがわかります。 、ただし x の値は 更新できます。
Value of x: 10 Modified value of x: 15
定数ポインタ エラーの例
これは定数ポインター ptr を宣言する例です。 変数 x のアドレスで初期化します。 。次に、変数 y のアドレスを指すようにします。 。これにより エラー が発生します。 定数ポインタは、初期化されると別のメモリ位置を指すことができないためです。
#include <stdio.h>
int main() {
int x = 10;
int y = 20;
int *const ptr = &x; // constant pointer to int
printf("Value of x: %d\n", *ptr);
// Attempting to change the pointer to point to y
ptr = &y; // cannot change the address of a constant pointer
return 0;
}
以下のエラーが表示されます。 、定数ポインタのアドレスを変更できないことを示します。
error: assignment of read-only variable 'ptr'
定数へのポインタ
定数へのポインタ これは、ポインタが指す値は変更できないが、ポインタ自体は別のメモリ アドレス (または変数) を指すことができることを意味します。
以下は定数へのポインタの構文です。 −
const data_type *pointer_name = &variable; data_type const *pointer = &variable;
この構文では、const data_type です。 または data_type const ポインタが定数値 pointer_name を指していることを意味します。 はポインタの名前、&variable 変数のアドレスを割り当てます。
定数へのポインタの例
この例では、 ポインタ ptr を宣言します。 これは定数値を指し、それに変数 a のアドレスを割り当てます。 。次に、 ポインタが変数 b の別のアドレスを指すようにします。 そしてその値を出力します。
#include <stdio.h>
int main() {
int a = 5;
int b = 30;
const int *ptr = &a; // pointer to constant int
printf("Value of a: %d\n", *ptr);
// *ptr = 10; //we cannot modify value through pointer
ptr = &b; // canging pointer address
printf("Now pointing to b: %d\n", *ptr);
return 0;
}
以下は出力です。 上記のプログラムでは、同じポインタが異なる変数を指していることが示されています。
Value of a: 5 Now pointing to b: 30
定数エラーへのポインタの例
以下は、定数 ptr へのポインタを宣言する例です。 そして変数 a のアドレスで初期化します。 。次に、a の値を変更してみます。 ポインタを通して。これによりエラー が発生します。 定数へのポインタでは、それが指す値を変更できないためです。
#include <stdio.h>
int main() {
int a = 5;
const int *ptr = &a; // pointer to constant int
printf("Value of a: %d\n", *ptr);
// we cnnot modify value through pointer to constant
*ptr = 10;
return 0;
}
以下に出力を示します。 、エラーが表示されます。 定数へのポインタを介して値を変更できないことを示します。
error: assignment of read-only location '*ptr'
定数への定数ポインタ
定数への定数ポインタ はメモリ アドレスを変更できないポインタであり、そのメモリ アドレスに格納されている値も変更できません。どちらのアクションも制限されているため、値を読み取ることのみが可能で、他には何も読み取ることができません。
以下は定数への定数ポインタの構文です。 −
const data_type *const pointer_name = &variable;
この構文では −
- 定数データ型 メモリ位置の値はポインタを介して変更できないことを示します。
- *const ポインタ名 初期化後はポインタ自体が他のメモリ アドレスを指すことができないことを意味します。
- 変数 ポインタを変数のメモリ アドレスに割り当てます。
定数への定数ポインタの例
この例では、定数 ptr への定数ポインタを宣言します。 そして変数 a のメモリ アドレスを割り当てます。 。次に、a の値を出力します。 ポインタを使用します。
#include <stdio.h>
int main() {
int a = 10;
const int *const ptr = &a; // constant pointer to constant
printf("Value of a: %d\n", *ptr);
// *ptr = 15; // we cannot modify value
// ptr = &b; // we annot change pointer location
return 0;
}
以下は出力です。 上記のプログラムの −
Value of a: 10
定数エラーへの定数ポインタの例
この例では、定数 ptr への定数ポインタを宣言します。 変数 a で初期化します。 。次に、ポインターを介して値を変更し、ポインターが別の変数を指すようにしようとします。どちらの操作も許可されていないため、コンパイラ エラーが発生します。 .
#include <stdio.h>
int main() {
int a = 10;
int b = 20;
const int *const ptr = &a; // constant pointer to constant
printf("Value of a: %d\n", *ptr);
// *ptr = 15; // we cnnot modify value
// ptr = &b; // we cannot change pointer address
return 0;
}
以下に出力を示します。 エラーの表示 -
Value of a: 10
定数ポインタ型の違い
次の表は両者の違いを示しています。 定数ポインタ、定数へのポインタ、定数への定数ポインタです。
int *const p = &x;定数へのポインタさまざまなアドレスを指すことができるポインタですが、指す場所の値を変更することはできません。YesNo
const int *p = &x;定数 アドレスが固定されている定数へのポインター。そのアドレスの値は変更できません。NoNo
const int *const p = &x;
結論
この章では、C の定数ポインタと定数へのポインタについて説明しました。定数ポインタ アドレスを修正しますが、 値、定数へのポインタの変更は許可します。 アドレスの変更は許可されますが、値の変更は許可されません。また定数への定数ポインターも許可されます。 両方を制限してください。
C言語