記事ディレクトリ
定数ポインターとポインター定数(ポインターは定数です)
メモリ/概要
定数ポインター:
1、意味:定数ポインター-ポインターが指すコンテンツは定数
2の構文:定数の前、ポインターの後、constが前に、*がback-constに*
ポインタ定数:
1、意味:ポインタ定数-ポインタ自体は定数
2、構文:ポインタの前、定数の後、*の前、constの後に-* const
定数ポインタ(一般的に使用されます!重要!)
定数ポインター:ポインターが指す内容は定数です
構文:const *
図1は、一定のポインタは、ポインタ変数の値によって変更されないと述べた
が、別の参照変数の値によって変更することができます。
int main() {
//-------------------------------------- 验证: 不能通过常量指针来改变变量的值
int const *p1; // 常量指针
int a = 4;
p1 = &a;
// *p1 = 5; // 编译错误,不能通过常量指针p来改变值
//-------------------------------------- 验证: 变量中的值可以通过其他的引用、或变量自身来改变
a = 5; // 正确,此时*p==5
int *p2 = &a; // 另一个指针
*p2 = 6; // 正确,此时*p==6
}
2.定数ポインタが指す値は変更できませんが、ポインタ自体が変更できないわけではなく、
定数ポインタが別のアドレスを指す場合もあります。
//-------------------------------------- 验证: 常量指针指向的地址可以更改
int main() {
int a = 4;
int b = 5;
const int *p; // 常量指针
p = &a; // 正确,此时*p==4
p = &b; // 正确,此时*p==5
// *p = 6; // 编译错误,不能通过常量指针p来改变值
}
ポインター定数(一般的には使用されません)
ポインタ定数はを参照するポインタ自体一定であると、他のアドレスにすることができなくなった時点
構文:* constの
1.ポインター定数が指すアドレスは変更できませんが、アドレスに格納されている値は変更でき
、ポインターのアドレスを指す他のポインターによって変更できます。
int main() {
//-------------------------------------- 验证: 指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的
int a = 4;
int b = 5;
int *const p = &a; // 指针常量 // 要马上初始化(同常量),之后无法赋值
// p = &b; // 错误,无法赋值
*p = 10; // 正确
//-------------------------------------- 验证: 可以通过其他指向 该指针的地址 的指针来修改(不重要,几乎不会用到)
int **pp = &p; // 正确,但会出现警告
printf("%d", *p);
*pp = &b; // 正确
printf("%d", *p);
}
定数定数へのポインタ(一般的には使用されません)
定数への定数ポインタは、上記の2つの組み合わせです。
構文:const * const
int const *const p;