const 修饰变量和指针(最详解)

1.1 const修饰变量

代码如下

int main()
{
	const int a = 10;
	a = 20;
	printf("%d", a);
	return;
}

此时,可以发现,a不能被直接修改,但是思考:能不能通过指针来修改呢?

 代码如下

int main()
{
    const int a = 10;
    int* p = &a;
    *p = 0;
    printf("%d", a);
    return;
}

 

不难发现,通过指针是可以修改的,那么现在我不想让它可以通过指针修改它的值,是不是可以用const来修饰指针呢? 

2.1 const修饰指针 

2.11 const在“*”的左边

代码如下

int main()
{
	//const在*的左边
	const int a = 10;
	const int* p = &a;
	*p = 20;
	return 0;
}

可以发现,当const在“*”的左边时,是不可以再通过指针去修改它的值的,那它可以干嘛呢?

代码如下 

int main()
{
	//const在*的左边
	const int a = 10;
	const int b = 20;
	const int* p = &a;
	p = &b;
	*p = 20;
	return 0;
}

 

此时,我们可以发现,虽然不可以通过指针p去修改a的值,但是指针p却可以换存一个地址,也就是目前p可以存b的地址。那么如果const放在“*”号的右边呢? 

 2.12 const在“*”的右边

代码如下:

 

int main()
{
    const int a = 10;
	int* const p = &a;
	*p = 20;
	printf("%d", a);
	return 0;
}

此时我们发现可以修改a的值,但是它可以换存一个地址吗?

代码如下

很显然,并不可以。

 结论:const修饰指针变量的时候,

(1)const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。 但是指针变量本⾝的内容可变。

(2)const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指 向的内容,可以通过指针改变。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值