- ポインタ変数が指す先が read-only である。
- ポインタ変数が read-only である。
- ポインタ変数が指す先とポインタ変数がともに read-only である。
- 変数 a と b は書き換えることができる。
- ポインタ変数 p が指す先を変数 a から 変数 b に書き換えることができる。
- ポインタ変数 p を介して 変数 a と b の値を書き換えることができる。
- 変数 a と b は書き換えることができる。
- ポインタ変数 p が指す先を変数 a から 変数 b に書き換えることができる。
- ポインタ変数 p を介して 変数 a と b の値を書き換えることができない。
- 変数 a と b は書き換えることができる。
- ポインタ変数 p が指す先を書き換えることができない。
- ポインタ変数 p を介して 変数 a の値を書き換えることができる。
- 変数 a と b は書き換えることができる。
- ポインタ変数 p が指す先を書き換えることができない。
- ポインタ変数 p を介して 変数 の値を書き換えることができない。
0. read-only 制約なし
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <stdio.h> int main(void) { int a = 3; int b = 7; int* p; p = &a; printf(" a = %d\n", a); /* 3 */ printf("*p = %d\n", *p); /* 3 */ p = &b; printf(" b = %d\n", b); /* 7 */ printf("*p = %d\n", *p); /* 7 */ *p = 9; printf(" b = %d\n", b); /* 9 */ printf("*p = %d\n", *p); /* 9 */ return 0; } |
1. ポインタ変数が指す先が read-only である
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <stdio.h> int main(void) { int a = 3; int b = 7; const int* p; p = &a; printf(" a = %d\n", a); /* 3 */ printf("*p = %d\n", *p); /* 3 */ p = &b; printf(" b = %d\n", b); /* 7 */ printf("*p = %d\n", *p); /* 7 */ *p = 9; /* error: read-only variable is not assignable */ return 0; } |
ちなみに次のように書いても同じである。 間接演算子 ( *
) の前に const修飾子 を記述する。
1 |
int const* p; |
2. ポインタ変数が read-only である
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <stdio.h> int main(void) { int a = 3; int b = 7; int* const p = &a; printf(" a = %d\n", a); /* 3 */ printf(" b = %d\n", b); /* 7 */ printf("*p = %d\n", *p); /* 3 */ *p = 9; printf("*p = %d\n", *p); /* 9 */ printf(" a = %d\n", a); /* 9 */ p = &b; /* error: cannot assign to variable 'p' with const-qualified type 'int *const' */ return 0; } |
3. ポインタ変数が指す先とポインタ変数がともに read-only である
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <stdio.h> int main(void) { int a = 3; int b = 7; const int* const p = &a; const int* const q = &b; printf(" a = %d\n", a); /* 3 */ printf("*p = %d\n", *p); /* 3 */ printf(" b = %d\n", b); /* 7 */ printf("*q = %d\n", *q); /* 7 */ p = &b; /* error: cannot assign to variable 'p' with const-qualified type 'int *const' */ *p = 9; /* error: read-only variable is not assignable */ return 0; } |