·指针是自由的。指针有两个值,一个是它本身的值(一个地址),一个是它所指向的值(*p)。
int main()
{
int a = 10;
int b = 20;
int* p = &a;
*p = 100;
p = &b;
return 0;
}
const的作用是封锁其修饰的变量,使得这个变量只能读不能写,当然,指针变量也不例外。
int main()
{
int a = 10;
int b = 20;
const int* p = &a;//这两行的效果完全一毛一样。
int const* p = &a;//这两行的效果完全一毛一样。
*p = 100; //error
p = &b;
return 0;
}
由于const修饰了p,所以p不可以被改写,只能被读取。因此出现了错误。
int main()
{
int a = 10;
int b = 20;
int *const p = &a;
*p = 100;
p = &b ; //error
return 0;
}
将const置于*之后,就会封锁p本身,使得p不能改变指向对象。因此出现错误。
从这里我们可以看得出来,const对指针变量的封锁效果与它和*号的位置有关。
int main()
{
int a = 10;
int b = 20;
const int *const p = &a;
int const* const p = &a;
*p = 100; //error
p = &b; //error
return 0;
}
此时,const将*p,p全部封锁,使得指针变量的所指对象和它本身只能被读取,而不能改写。
int main()
{
int a = 10;//普通局部变量
const int b = 20;//局部常变量
int* pa = &a;//普通局部变量可以用普通指针指向他。
const int* pa=&a;//也可以用常量指针去指向他。
//int* pb = &b;//error
const int* pb = &b;//但是对于局部常变量就必须由常量指针去指向他。
*pb = 200;//error 错误原因就是前面说的那个
return 0;
}
不写了不写了,烦死了,跑飞车去!!!快乐我来啦!!!!
2021年9月27日补一下 , 关于强转的一点。
int main()
{
const int a = 10;//定义一个常变量
int* p;//定义一个指针
p=(int*)&a;//通过强制转换(强转)把a的地址给指针变量p
*p = 100;//
//
printf("%d %d\n", a, *p);//虽然通过强转把a的地址给了p,但是很明显,a=10;*p=100。
return 0;
}