const与指针
c语言中const使用
c语言中const以变量为主 即上面定义中const定义的值不能改变 在下面数组的定义中 n仍为变量,并不能成功定义
int main(){
const int n = 10;
int ar[n] = {1,2};//error
int *p = (int*)&n;
*p = 100;
printf("n = %d *p = %d \n",n,*p);
}
int main() {
const int a = 10;
int b = 0;
int* ap = (int*)&a;
*ap = 100;
b = a;
return 0;
// 结果 a = 100 b = 100 *ap = 100
}
c++中const的使用
c++中const定义后直接当做宏定义使用,即为常变量
int main() {
const int a = 10;//直接把他当做宏定义的常变量 后续的a先换成10 在进行其余变化
int b = 0;
int* ap = (int*)&a;
*ap = 100;
b = a;// b = 10;
return 0;
// 结果 a = 10 b = 10 *ap = 100
}
int main() {
const int n = 10;
int ar[n] = { 1,2,3 };//c++中认为其为常量
}
const与指针相结合
p3 指针变量自身为常性 p4 指向(解引用)和指针变量本身都为常性
int main() {
int a = 10, b = 20;
int* p1 = &a;
const int* p2 = &a;//p2 p22 相同 *p2 -=100;//error
//int const* p22 = &a;
int* const p3 = &a;//p3 = &b;//error
const int* const p4 = &a;
}
常变量与指针
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
}
const引用
int main() {
int a = 10;
const int b = 20;
int& x = b;//error
const int& x = b;//ok
const int& y = a;//ok
const int& z = 10;//ok
return 0;
}
//为了安全
const int& X = b;
//int tmp = b;
//cosnt int &x = b;
const int& Z = 10;
//int tmp = b;
//const int &z = tmp;