const与指针
const在C 和C++中的区别
int main(){
const int n = 10; // C语言中以变量为主。
int ar[n] = { 1,2 }; // error;
int* p = (int*)&n; //
*p = 100;
printf("%n = %d *p = %d n", n, *p);
return 0;
}
int main(){
const int n = 10; // C++ 语言中以常量为主。
int ar[n] = { 1,2,3,4 }; // ok;
int* p = (int*)&n;
*p = 100;
cout << "n = " << n << " *p = " << *p << endl;
return 0;
}
const与指针的关系
int main()
{
int a = 10, b = 10;
int *p1 = &a; // 普通指针
const int *p2 = &a; // 指向为常性(解引用为常性)
int const *p2 = &a;
int * const p3 = &a; // 指针变量自身为常性
const int * const p4 = &a; // 指向(解引用)和指针变量自身都为常性
}
int main()
{
int a = 0;
int *p1 = &a; // ok;
const int *p2 = &a; // ok;
int * const p3 = &a; // ok;
const int * const p4 = &a; // ok;
return 0;
}
//编译方式不同
常变量与指针
int main()
{
const int a = 10;
int *p1 =&a; // error;
const int *p2 = &a; // ok;
int * const p3 = &a; // error;
const int * const *p4 = &a; // ok;
int *p5 = (int*) &a; // ok 不安全
return 0;
}
同类型指针赋值兼容规程
int main()
{
int a = 10,b = 20;
int *p = &a;
int *s1 = p; // ok;
const int *s2 = p; // ok;
int * const s3 = p; // ok;
const int * const s4 = p; //ok;
}
总结:能力强的指针赋值给能力收缩的指针