【指针与const】【常量指针】

·指针是自由的。指针有两个值,一个是它本身的值(一个地址),一个是它所指向的值(*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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值